Такое же поле взаимосвязи ACF для нескольких подстраниц параметров записи?

Вопрос или проблема

Как я могу убедиться, что данные, сохраненные полем Relationship в Advanced Custom Fields, когда они находятся на странице Options для определенного типа записи, хранятся отдельно?

Подробности ниже:

У меня есть группа полей ACF под названием “Features”, содержащая поле Relationship.

Она предназначена для предварительной настройки некоторых избранных публикаций для нескольких пользовательских типов записей – “Reports” и “Articles”.

Для этих типов записей в том же коде, который регистрирует каждый тип записи, я создал подстраницу Options следующим образом…

// Поддержка демонстрации Features для этого типа записи через ACF

if( function_exists('acf_add_options_page') ) {

    // добавляем подстраницу
    acf_add_options_sub_page(array(
        'page_title'    => 'Articles Features',
        'menu_title'    => 'Articles Features',
    'menu_slug'   => 'articles-features',
    'capability'  => 'edit_posts',
        'parent_slug'   => 'edit.php?post_type=article',
    'position'    => false,
    'icon_url'    => false
    ));

}

То же самое для “Reports”.

Затем я применяю группу полей “Features” к обеим подстраницам Options – “Articles Features” и “Reports Features”.

Проблема в том, что данные одинаковы.
То есть шесть записей Relationship, установленных для “Reports Features”, также отображаются на подстранице Options для “Articles Features”. Изменение одного поля Relationship перезаписывает другое.

Как я могу обеспечить, чтобы эти две вещи были раздельны, чтобы я мог сохранять функции отдельно для каждого типа записи, не создавая группу полей заново?

Метод, который нужно использовать, таков…

В объявлении acf_add_options_sub_page добавьте 'post_id' => 'article' в качестве параметра. (post_id)

Вот как данные поля, введенные на странице Options, соответствующей моему типу записи, будут сохранены.

На этапе отображения используйте $featured_posts = get_field('featured_posts', 'article');

Оба ‘article’ и ‘report’ используются.

В моем случае, на этапе отображения, я использую $queried_object->name, чтобы динамически определить либо ‘article’, либо ‘report’ типы записей.

Благодарность hube2

Ответ или решение

Чтобы гарантировать, что данные, сохраненные в поле связи Relationship в Advanced Custom Fields (ACF), на странице параметров Options для типа записи Post, остаются уникальными для каждой опции, вы можете использовать параметр ‘post_id’. Этот метод позволяет сохранять данные отдельно для каждого типа записи, не создавая новую группу полей.

Теория:

Когда вы создаете подстраницы Options pages при помощи функции acf_add_options_sub_page, данные поля сохраняются по умолчанию в одной и той же глобальной области, если не указать иначе. Это приводит к тому, что при изменении данных на одной странице изменения отражаются и на другой. Избежать этого позволяет использование уникального идентификатора ‘post_id’, который определяет, где именно в базе данных должны сохраняться данные.

Пример:

Ваша задача — создать отдельные подстраницы "Articles Features" и "Reports Features" для разных типов постов. Каждая из этих подстраниц использует одну и ту же группу полей "Features". Однако без дополнительных настроек данные будут перезаписываться, так как используются одни и те же поля.

Итак, чтобы разделить данные, в параметры функции acf_add_options_sub_page добавьте 'post_id' => 'article' и 'post_id' => 'report' соответственно для каждой подстраницы. Это гарантирует, что данные из Relationship полей будут сохраняться отдельно для каждой опции и не будут перезаписывать друг друга.

Применение:

// Добавляем страницу опций для Articles
acf_add_options_sub_page(array(
    'page_title' => 'Articles Features',
    'menu_title' => 'Articles Features',
    'menu_slug'  => 'articles-features',
    'capability' => 'edit_posts',
    'parent_slug' => 'edit.php?post_type=article',
    'post_id'    => 'article' // Уникальный идентификатор для сохранения
));

// Аналогично для Reports
acf_add_options_sub_page(array(
    'page_title' => 'Reports Features',
    'menu_title' => 'Reports Features',
    'menu_slug'  => 'reports-features',
    'capability' => 'edit_posts',
    'parent_slug' => 'edit.php?post_type=report',
    'post_id'    => 'report' // Уникальный идентификатор для сохранения
));

Для получения данных на фронтенде используйте функцию get_field с соответствующим идентификатором ‘post_id’:

$featured_posts = get_field('featured_posts', 'article'); // Для статей
$featured_posts = get_field('featured_posts', 'report'); // Для отчетов

Этот подход обеспечивает независимость данных и позволяет вам управлять характеристиками для каждого типа записи отдельно.

Оцените материал
Добавить комментарий

Капча загружается...