wp_back/wp-content/plugins/visual-portfolio/classes/3rd/plugins/class-wpml.php
2024-05-20 15:37:46 +03:00

167 lines
4.4 KiB
PHP

<?php
/**
* Register some fields for WPML.
*
* @package visual-portfolio/preview
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase, WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
/**
* Class Visual_Portfolio_3rd_WPML
*/
class Visual_Portfolio_3rd_WPML {
/**
* Archive Page.
*
* @var int $archive_page
*/
private $archive_page = null;
/**
* Visual_Portfolio_3rd_WPML constructor.
*/
public function __construct() {
global $iclTranslationManagement;
if ( class_exists( 'SitePress' ) ) {
add_action( 'init', array( $this, 'init' ), 9 );
}
if ( ! isset( $iclTranslationManagement ) ) {
return;
}
add_filter( 'vpf_registered_controls', array( $this, 'make_control_translatable' ) );
add_filter( 'vpf_extend_options_before_query_args', array( $this, 'prepare_custom_query_taxonomies' ) );
}
/**
* Initialize archive.
*
* @see __construct
*/
public function init() {
$this->archive_page = Visual_Portfolio_Settings::get_option( 'portfolio_archive_page', 'vp_general' );
if ( isset( $this->archive_page ) && ! empty( $this->archive_page ) ) {
add_action( 'wp_insert_post', array( $this, 'set_archive_meta' ), 10, 1 );
}
}
/**
* Set Archive Meta.
*
* @param int $post_id - Post ID.
* @return void
*/
public function set_archive_meta( $post_id ) {
$translate_page_id = self::get_object_id( $this->archive_page );
if ( $translate_page_id === $post_id ) {
visual_portfolio()->defer_flush_rewrite_rules();
update_post_meta( (int) $post_id, '_vp_post_type_mapped', 'portfolio' );
}
}
/**
* Get wpml object ID.
*
* @param int $post_id - Post ID.
* @return int
*/
public static function get_object_id( $post_id ) {
if ( class_exists( 'SitePress' ) ) {
return apply_filters( 'wpml_object_id', $post_id, 'page', true );
}
return $post_id;
}
/**
* Make Control Translatable.
* https://wpml.org/forums/topic/unable-to-save-custom-field-translation-settings-when-acf-ml-is-installed/
*
* @param array $controls - controls array.
*
* @return array
*/
public function make_control_translatable( $controls ) {
global $iclTranslationManagement;
$allow_save = false;
// Prepare Saved Layouts meta fields.
foreach ( $controls as $control ) {
$name = 'vp_' . $control['name'];
// Create initial arrays.
if ( ! isset( $iclTranslationManagement->settings['custom_fields_translation'] ) ) {
$iclTranslationManagement->settings['custom_fields_translation'] = array();
}
if ( ! isset( $iclTranslationManagement->settings['custom_fields_readonly_config'] ) ) {
$iclTranslationManagement->settings['custom_fields_readonly_config'] = array();
}
// Add fields translation.
if ( ! isset( $iclTranslationManagement->settings['custom_fields_translation'][ $name ] ) ) {
$iclTranslationManagement->settings['custom_fields_translation'][ $name ] = $control['wpml'] ? WPML_TRANSLATE_CUSTOM_FIELD : WPML_COPY_CUSTOM_FIELD;
$allow_save = true;
}
// Add fields read only.
if ( ! in_array( $name, $iclTranslationManagement->settings['custom_fields_readonly_config'], true ) ) {
$iclTranslationManagement->settings['custom_fields_readonly_config'][] = $name;
$allow_save = true;
}
}
// Images meta array.
if ( ! isset( $iclTranslationManagement->settings['custom_fields_attributes_whitelist']['vp_images'] ) ) {
$iclTranslationManagement->settings['custom_fields_attributes_whitelist']['vp_images'] = array(
'*' => array(
'title' => array(),
'description' => array(),
'author' => array(),
'categories' => array(),
),
);
$allow_save = true;
}
if ( $allow_save ) {
$iclTranslationManagement->save_settings();
}
return $controls;
}
/**
* Convert custom taxonomies to the current language.
*
* @param array $options - query options.
*
* @return array
*/
public function prepare_custom_query_taxonomies( $options ) {
if ( isset( $options['posts_taxonomies'] ) && ! empty( $options['posts_taxonomies'] ) ) {
foreach ( $options['posts_taxonomies'] as $k => $taxonomy ) {
$taxonomy_data = get_term( $taxonomy );
if ( isset( $taxonomy_data->taxonomy ) ) {
$options['posts_taxonomies'][ $k ] = apply_filters( 'wpml_object_id', $taxonomy, $taxonomy_data->taxonomy, true );
}
}
}
return $options;
}
}
new Visual_Portfolio_3rd_WPML();