Как настроить кастомные поля в WordPress с помощью плагинов Polylang и Carbon Fields для отображения на главной странице?

Как сохранить значения кастомных полей на главной странице в WordPress при использовании плагинов Polylang и Carbon Fields? В настоящее время значения сохраняются только на основном языке, при этом на других языках после сохранения они обнуляются.

```php
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'); ?>
```
  • 7 февраля 2024 г. 19:49
Ответы на вопрос 1
Чтобы использовать кастомные поля, созданные с помощью Carbon Fields в WordPress, вместе с плагином Polylang для мультиязычных сайтов, вы должны убедиться, что данные корректно синхронизируются и сохраняются для всех языков. Вот шаги, которые вам помогут настроить кастомные поля для отображения на главной странице и их сохранения на разных языках:

1. Создание кастомных полей:
   Сначала вам нужно определить кастомные поля с помощью Carbon Fields, как указано в вашем примере. Например:

```php
use Carbon_Fields\Container;
use Carbon_Fields\Field;

add_action( 'carbon_fields_register_fields', 'crb_attach_theme_options' );
function crb_attach_theme_options() {
    Container::make( 'post_meta', __( 'Homepage Settings', 'your-text-domain' ) )
        ->where( 'post_type', '=', 'page' )
        ->where( 'post_template', '=', 'template-home.php' )
        ->add_tab(__('Верхний блок', 'your-text-domain'), [
           Field::make( 'textarea', 'hero_desc', __( 'Описание', 'your-text-domain') )
        ]);
}

add_action( 'after_setup_theme', 'crb_load' );
function crb_load() {
    require_once( 'vendor/autoload.php' );
    \Carbon_Fields\Carbon_Fields::boot();
}
```
   
2. Отображение кастомных полей:
   Чтобы отобразить значение кастомного поля на главной странице, следует использовать функцию `carbon_get_post_meta()`, как вы уже сделали. Но важно убедиться, что вы используете правильный ID страницы для каждого языка.

```php
$homepage_id = (function_exists('pll_get_post')) ? pll_get_post(get_option( 'page_on_front' )) : get_option( 'page_on_front' );
$hero_desc = carbon_get_post_meta( $homepage_id, 'hero_desc' );
echo esc_textarea( $hero_desc );
```

3. Сохранение кастомных полей для всех языков:
   Убедитесь, что кастомные поля сохраняются для всех языков. Для этого может потребоваться использование дополнительных хуков Polylang, чтобы связать кастомные поля между переводами страниц. Есть несколько способов это сделать, например через фильтр `pll_copy_post_metas` в Polylang.

```php
function my_pll_copy_post_metas( $keys ) {
    // 'hero_desc' это идентификатор поля Carbon Fields. Вы можете добавить еще поля здесь.
    $keys[] = 'hero_desc';
    return $keys;
}
add_filter( 'pll_copy_post_metas', 'my_pll_copy_post_metas' );
```

Этот код позволит вам копировать данные кастомного поля `hero_desc` во все языковые версии страницы при сохранении или обновлении основной страницы страницы.

Удостоверьтесь, что вы добавили любые функции и хуки в файлы темы WordPress, например, в `functions.php` или предпочитаемое место для кастомного кода в вашей теме.
Похожие вопросы