Как сделать переводимыми все пользовательские поля

При переводе с помощью WPML пользовательских полей, созданных плагином ACF, возникает вопрос - как сделать все поля переводимыми?

Как сделать переводимыми все пользовательские поля


При переводе с помощью 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 и все пользовательские поля станут переводимыми.

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.