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

При переводе с помощью WPML пользовательских полей, созданных плагином ACF, возникает вопрос — как сделать все поля переводимыми? Обычно на сайте таких полей достаточно много (сотни — типичный пример) и кликать в настройках WPML сотни раз — довольно утомительная работа.

Ниже пример того, как это можно сделать с помощью кода.

Создайте папку acf-helper в корне сайта. Поместите в неё два файла: acf-helper.php и class-acf-helper.php.

Код в acf-helper.php:

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

Источник: KAGG Design

Игорь Гергель

Единственный обладатель значков золотой WordPress и бронзовый WooCommerce на StackOverflow RU. WordPress Core contributor. Работал ведущим девелопером в команде WPML.

%d такие блоггеры, как: