woocommerce_wpml = $woocommerce_wpml; $this->sitepress = $sitepress; } public function wp_do_action( $hook ) { do_action( $hook ); } public function get_model() { $model = [ 'form' => [ 'action' => $_SERVER['REQUEST_URI'], 'synchronization' => [ 'heading' => __( 'Products Synchronization', 'woocommerce-multilingual' ), 'tip' => __( 'Configure specific product properties that should be synced to translations.', 'woocommerce-multilingual' ), 'sync_date' => [ 'value' => $this->woocommerce_wpml->settings['products_sync_date'], 'label' => __( 'Sync publishing date for translated products.', 'woocommerce-multilingual' ), ], 'sync_order' => [ 'value' => $this->woocommerce_wpml->settings['products_sync_order'], 'label' => __( 'Sync products and product taxonomies order.', 'woocommerce-multilingual' ), ], ], 'media_synchronization' => [ 'heading' => __( 'Products Media Synchronization', 'woocommerce-multilingual' ), 'tip' => __( 'Configure thumbnail and gallery synchronization to translations.', 'woocommerce-multilingual' ), 'sync_media' => [ 'value' => $this->woocommerce_wpml->get_setting( 'sync_media', true ), 'label' => __( 'Display original images on the translated product front page if images not specified', 'woocommerce-multilingual' ), ], ], 'file_sync' => [ 'heading' => __( 'Products Download Files', 'woocommerce-multilingual' ), 'tip' => __( 'If you are using downloadable products, you can choose to have their paths synchronized, or seperate for each language.', 'woocommerce-multilingual' ), 'value' => $this->woocommerce_wpml->settings['file_path_sync'], 'label_same' => __( 'Use the same files for translations', 'woocommerce-multilingual' ), 'label_diff' => __( 'Add separate download files for translations when translating products', 'woocommerce-multilingual' ), ], 'product_reviews' => [ 'heading' => __( 'Product reviews', 'woocommerce-multilingual' ), 'tip' => __( 'Define how to display product reviews on the product page by default. The customer will be still able to filter reviews by language.', 'woocommerce-multilingual' ), 'reviews_in_all_languages' => [ 'value' => $this->woocommerce_wpml->get_setting( 'reviews_in_all_languages', false ), 'label' => __( 'By default, show reviews in all languages', 'woocommerce-multilingual' ), ], ], 'cart_sync' => [ 'tip' => __( 'You can choose to clear the cart contents when you change language or currency in case you have problems in cart or checkout page', 'woocommerce-multilingual' ), 'heading' => __( 'Cart', 'woocommerce-multilingual' ), 'lang_switch' => [ 'heading' => __( 'Switching languages when there are items in the cart', 'woocommerce-multilingual' ), 'sync_label' => __( 'Synchronize cart content when switching languages', 'woocommerce-multilingual' ), 'clear_label' => __( 'Prompt for a confirmation and reset the cart', 'woocommerce-multilingual' ), 'value' => $this->woocommerce_wpml->settings['cart_sync']['lang_switch'], ], 'currency_switch' => [ 'heading' => __( 'Switching currencies when there are items in the cart', 'woocommerce-multilingual' ), 'sync_label' => __( 'Synchronize cart content when switching currencies', 'woocommerce-multilingual' ), 'clear_label' => __( 'Prompt for a confirmation and reset the cart', 'woocommerce-multilingual' ), 'value' => $this->woocommerce_wpml->settings['cart_sync']['currency_switch'], ], 'wpml_cookie_enabled' => $this->sitepress->get_setting( WPML_Cookie_Setting::COOKIE_SETTING_FIELD ), 'cookie_not_enabled_message' => sprintf( /* translators: %1$s and %2$s are opening and closing HTML link tags */ __( 'This feature was disabled. Please enable %1$sWPML cookies%2$s to continue.', 'woocommerce-multilingual' ), '', '' ), 'doc_link' => sprintf( /* translators: %1$s and %2$s are opening and closing HTML link tags */ __( 'Not sure which option to choose? Read about %1$spotential issues when switching languages and currencies while the cart has items%2$s.', 'woocommerce-multilingual' ), '', '' ), ], 'nonce' => wp_nonce_field( 'wcml_save_settings_nonce', 'wcml_nonce', true, false ), 'save_label' => __( 'Save changes', 'woocommerce-multilingual' ), ], 'native_translation' => WCML_TRANSLATION_METHOD_MANUAL, 'wpml_translation' => WCML_TRANSLATION_METHOD_EDITOR, 'wcml_cart_sync' => WCML_CART_SYNC, 'wcml_cart_clear' => WCML_CART_CLEAR, 'troubleshooting' => [ 'url' => admin_url( 'admin.php?page=wpml-wcml&tab=troubleshooting' ), 'label' => __( 'Troubleshooting', 'woocommerce-multilingual' ), ], ]; if ( $this->woocommerce_wpml->is_wpml_prior_4_2() ) { $model['form']['translation_interface'] = [ 'heading' => __( 'Product Translation Interface', 'woocommerce-multilingual' ), 'tip' => __( 'The recommended way is using the WPML Translation Editor. It is streamlined for making the translation process much easier while also providing a much better integration with various WooCommerce extensions.', 'woocommerce-multilingual' ), 'wcml' => [ 'label' => __( 'WPML Translation Editor', 'woocommerce-multilingual' ), ], 'native' => [ 'label' => __( 'Native WooCommerce product editing screen', 'woocommerce-multilingual' ), ], 'controls_value' => $this->woocommerce_wpml->settings['trnsl_interface'], 'pb_warning' => __( "If you are using a page builder to design WooCommerce products, you should only use WPML's Translation Editor.", 'woocommerce-multilingual' ), 'pb_warning_ok_button' => __( 'OK (translate with the WordPress editor)', 'woocommerce-multilingual' ), 'pb_warning_cancel_button' => __( 'Cancel (stay with the Translation Editor)', 'woocommerce-multilingual' ), ]; } return $model; } protected function init_template_base_dir() { $this->template_paths = [ WCML_PLUGIN_PATH . '/templates/', ]; } public function get_template() { return 'settings-ui.twig'; } }