Как использовать кастомные поля в WordPress с плагинами polylang и carbon fields на главной странице?

Ссылка скопирована
1 ответ

Как использовать кастомные поля в Wordpress с плагинами polylang и carbon fields на главной странице?
Сейчас заполнение полей сохраняется только на главном языке. То есть на других языках после заполнения поле нажатия Сохранить все поля обнуляются

Container::make( 'post_meta', __( 'Homepage Settings' ) )
->where( 'post_type', '=', 'page' )
->where( 'post_template', '=', 'home.php' )
->add_tab(__('Верхний блок'), [
Field::make( 'textarea', 'hero_desc', __( 'Описание') )

<?php echo carbon_get_post_meta( get_the_ID(), 'hero_desc'); ?

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

В связке Polylang + Carbon Fields важно понимать: главная страница на разных языках — это разные page ID. Поля post_meta сохраняются не “для шаблона”, а для конкретной страницы. Поэтому если Вы заполнили поле на русской главной, на английской/украинской странице оно само не появится: у неё другой ID и свои meta.

Правильный путь — создать переводы главной страницы в Polylang, назначить для каждого языка свою главную в настройках Polylang/WordPress и заполнять Carbon Fields на каждой языковой версии отдельно.

Регистрация контейнера может остаться такой:

Container::make('post_meta', 'Homepage Settings')
    -&gt;where('post_type', '=', 'page')
    -&gt;where('post_template', '=', 'home.php')
    -&gt;add_tab('Верхний блок', [
        Field::make('textarea', 'hero_desc', 'Описание'),
    ]);

Container::make('post_meta', 'Homepage Settings') -&gt;where('post_type', '=', 'page') -&gt;where('post_template', '=', 'home.php') -&gt;add_tab('Верхний блок', [ Field::make('textarea', 'hero_desc', 'Описание'), ]);

На фронте берите ID текущей страницы, а не абстрактный ID главной:

$page_id = get_queried_object_id();
echo wp_kses_post(carbon_get_post_meta($page_id, 'hero_desc'));

$page_id = get_queried_object_id(); echo wp_kses_post(carbon_get_post_meta($page_id, 'hero_desc'));

Если Вы находитесь не в обычном цикле или выводите блок из общего шаблона, get_the_ID() может вернуть не тот ID. Для главной страницы надёжнее использовать get_queried_object_id() или get_option('page_on_front') с учётом языка.

Если нужно получить поле с главной страницы текущего языка:

$front_id = (int) get_option('page_on_front');
 
if (function_exists('pll_get_post')) {
    $translated_front_id = pll_get_post($front_id);
    if ($translated_front_id) {
        $front_id = $translated_front_id;
    }
}
 
echo wp_kses_post(carbon_get_post_meta($front_id, 'hero_desc'));

$front_id = (int) get_option('page_on_front'); if (function_exists('pll_get_post')) { $translated_front_id = pll_get_post($front_id); if ($translated_front_id) { $front_id = $translated_front_id; } } echo wp_kses_post(carbon_get_post_meta($front_id, 'hero_desc'));

Если поля “обнуляются” после сохранения, проверьте, что Вы редактируете именно перевод страницы, а не одну и ту же страницу под разными языками. Также убедитесь, что контейнер Carbon Fields регистрируется на хуке carbon_fields_register_fields, а не условно только для одного языка.

Итог: для мультиязычной главной у каждой языковой страницы должны быть свои значения Carbon Fields. Выводите поля по ID текущей переведённой страницы, тогда данные перестанут пропадать.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно