Как использовать кастомные поля в WordPress с плагинами polylang и carbon fields на главной странице?
Как использовать кастомные поля в 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'); ?
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В связке Polylang + Carbon Fields важно понимать: главная страница на разных языках — это разные page ID. Поля
post_metaсохраняются не “для шаблона”, а для конкретной страницы. Поэтому если Вы заполнили поле на русской главной, на английской/украинской странице оно само не появится: у неё другой ID и свои meta.Правильный путь — создать переводы главной страницы в Polylang, назначить для каждого языка свою главную в настройках Polylang/WordPress и заполнять Carbon Fields на каждой языковой версии отдельно.
Регистрация контейнера может остаться такой:
Container::make('post_meta', 'Homepage Settings') ->where('post_type', '=', 'page') ->where('post_template', '=', 'home.php') ->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'));
Если Вы находитесь не в обычном цикле или выводите блок из общего шаблона,
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'));
Если поля “обнуляются” после сохранения, проверьте, что Вы редактируете именно перевод страницы, а не одну и ту же страницу под разными языками. Также убедитесь, что контейнер Carbon Fields регистрируется на хуке
carbon_fields_register_fields, а не условно только для одного языка.Итог: для мультиязычной главной у каждой языковой страницы должны быть свои значения Carbon Fields. Выводите поля по ID текущей переведённой страницы, тогда данные перестанут пропадать.