При переводе с помощью WPML пользовательских полей, созданных плагином ACF, возникает вопрос — как сделать все поля переводимыми? Обычно на сайте таких полей достаточно много (сотни — типичный пример) и кликать в настройках WPML сотни раз — довольно утомительная работа.
Ниже пример того, как это можно сделать с помощью кода.
Создайте папку acf-helper
в корне сайта. Поместите в неё два файла: acf-helper.php
и class-acf-helper.php
.
Код в acf-helper.php
:
1 2 3 4 5 6 7 8 | <?php require_once '../wp-load.php' ; require_once 'class-acf-helper.php' ; $acf_helper = new ACF_Helper(); $acf_helper ->make_all_cf_translatable(); |
Код в class-acf-helper.php
:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php /** * ACF_Helper class file */ /** * Class ACF_Helper */ class ACF_Helper { private $tm = null; public function __construct() { if ( class_exists ( 'SitePress' ) ) { $this ->tm = wpml_load_core_tm(); } } public function make_all_cf_translatable() { if ( null === $this ->tm ) { echo 'Error: WPML Multilingual CMS plugin must be activated.' ; return ; } $settings = $this ->tm->get_settings(); $factory = new WPML_Custom_Field_Setting_Query_Factory(); $query = $factory ->create( WPML_Custom_Field_Setting_Query_Factory::TYPE_POSTMETA ); $cft = $query ->get( [ 'hide_system_fields' => true ] ); $cft = array_fill_keys( $cft , WPML_TRANSLATE_CUSTOM_FIELD ); $settings [ WPML_POST_META_SETTING_INDEX_PLURAL ] = array_merge ( $settings [ WPML_POST_META_SETTING_INDEX_PLURAL ], $cft ); $this ->tm->settings = $settings ; $this ->tm->save_settings(); } } |
Запустите acf-helper.php
и все пользовательские поля станут переводимыми.
