Перейти к содержанию Перейти к боковой панели

Это форум технической поддержки WPML – плагина для многоязычной WordPress.

Доступно для чтения всем, но только клиенты, купившие WPML, могут оставлять сообщения. Сотрудники WPML отвечают на сообщения форума 6 дней в неделю, 22 часов в сутки.

Sun Mon Tue Wed Thu Fri Sat
- 9:00 – 13:00 9:00 – 13:00 9:00 – 13:00 9:00 – 13:00 9:00 – 13:00 -
- 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 -

Часовой пояс сторонника: Europe/Kyiv (GMT+03:00)

Помечено: ,

Эта тема содержит 3 ответов, имеет 0 голоса.

Последнее обновление: Andrey 2 дня, 7 часов назад.

При содействии: Andrey.

Автор Посты
16 июля, 2025 в 2:43 пп #17242734

chiorescoE

Предыстория вопроса:
У нас на сайте используется WPML и тема Woodmart. Для каждого товара есть пользовательский таб с ингредиентами и сроком годности (Custom Tab 2 Content). Мы обновляем этот таб на всех товарах через API (по SKU) с помощью собственного скрипта.

Симптомы:
После обновления через API изменения отображаются только на основной (румынской) версии товара, а на русской версии таб остается старым, пока мы вручную не зайдем в продукт и не пересохраним его или не подтвердим перевод в редакторе WPML.

Вопросы:
Как можно автоматически синхронизировать/обновить содержимое пользовательского таба между языками после такого обновления, чтобы на русском языке изменения появлялись сразу, без ручного подтверждения или пересохранения?
Можно ли настроить автоматическую синхронизацию этого кастомного поля между языками после обновления через API, например, с помощью 'Synchronize custom fields' или какого-либо хука WPML?
Какой самый эффективный способ автоматизировать этот процесс для большого количества товаров?

16 июля, 2025 в 6:35 пп #17243440

Andrey
Сторонник WPML с 06/2013

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+03:00)

Спасибо за обращение в службу поддержки WPML.

Чтобы автоматизировать синхронизацию содержимого Вашего кастомного таба между языками после обновления через API, можно использовать функциональность WPML и несколько удобных хук‑ов.

Вот рекомендации:

1. Убедитесь, что поле помечено как Copy в WPML

Перейдите в WPML → Settings → Custom fields translation и найдите ваше поле (например, _custom_tab_2_content или ingredient_tab). Задайте режим перевода Copy — это необходимо, чтобы WPML мог автоматически копировать и синхронизировать значение при вызове соответствующих хук‑ов.

2. Используйте хук wpml_sync_custom_field после API‑обновления

После обновления кастомного поля через API, добавьте вызов:

do_action('wpml_sync_custom_field', $product_id, '_custom_tab_2_content');

Он передаст новое значение в переведённые продукты, если поле настроено как Copy

https://wpml.org/wpml-hook/wpml_sync_custom_field/

3. (Альтернатива) Синхронизировать все кастомные поля сразу

Если Вы обновляете несколько полей или не хотите отслеживать их вручную, можно вызвать:

do_action('wpml_sync_all_custom_fields', $product_id);

https://wpml.org/documentation/support/wpml-coding-api/wpml-hooks-reference/#hook-1560761

Так будут синхронизированы все поля, настроенные как Copy.

17 июля, 2025 в 5:35 дп #17243954

chiorescoE

Я получил от вас рекомендацию:

Установить для нужного кастомного поля режим «Copy» в WPML → Settings → Custom fields translation
После обновления вызывать хук do_action('wpml_sync_custom_field', $product_id, '_woodmart_product_custom_tab_content_2');
Проблема в том, что я не могу найти это кастомное поле ни в редакторе товара, ни в настройках WPML. После заполнения вкладки и сохранения товара никакое новое мета-поле не появляется.

Вопрос:

Как называется или где находится мета-поле, в котором тема Woodmart сохраняет содержимое пользовательских вкладок?
Как правильно настроить синхронизацию этого поля между языками через WPML, если оно не отображается в списке кастомных полей?
Моя задача — чтобы содержимое вкладки автоматически копировалось между языками.

Спасибо за помощь!

С уважением,
Виктор

17 июля, 2025 в 7:24 дп #17244140

Andrey
Сторонник WPML с 06/2013

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+03:00)

Спасибо за отзыв, Виктор.

Вам нужно сначала точно определить, как называется пользовательское поле, которое Вы обновляете. Пример ниже демонстрирует хук wpml_sync_custom_field, который Вы можете использовать в пользовательском коде для синхронизации этого поля между переводами:

do_action('wpml_sync_custom_field', $product_id, '_custom_tab_2_content');

Где:

• _custom_tab_2_content — это пример имени пользовательского поля. Вам необходимо заменить его на фактическое имя поля, которое Вы используете в Вашем коде.
• $product_id — это переменная, содержащая ID товара. Замените её на ту переменную, которую Вы используете для хранения ID продукта в Вашем скрипте.