<?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();