Как отфильтровать get_post с ACF по полю чекбокс?

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

Итак, у меня есть пользовательский тип контента под названием “team”, к которому прикреплено поле ACF под названием “external”, представляющее собой флажок. В настоящее время я получаю все посты, передавая следующий массив аргументов в функцию get_post.

 $args = array(
            'posts_per_page'   => -1,
            'offset'           => 0,
            'orderby' => 'menu_order', 
            'order' => 'ASC', 
            'post_type'        => 'team',
            'post_status'      => 'publish',

        );

Что бы я хотел сделать, так это запустить это в двух функциях, проверяя, отмечено ли поле или нет, в основном фильтруя по тому, кто является внутренним, а кто нет. Я не уверен, как настроить meta_query для этого.

Итак, разбросанная документация по этому поводу действительно неясна.

Для проверки неотмеченных постов добавил следующий meta_query:

    'meta_query' => array(array(
    'key' =>  'external',
    'value'  => '0',
    'compare' =>  '='
    ))

Для фильтрации отмеченных это было просто:

     meta_query => array(array(
    'key' =>  'external',
    'value'  => '0',
    'compare' =>  '='
    ))

Вы можете добиться этого, используя параметр meta_query в аргументах WP_Query, чтобы фильтровать посты на основе значения поля-флажка ACF. Установите 0 для неотмеченного и установите 1 для отмеченного в параметре value в meta_query.

// Получить внутренних участников команды
$args_internal = array(
    'posts_per_page'   => -1,
    'orderby'          => 'menu_order',
    'order'            => 'ASC',
    'post_type'        => 'team',
    'post_status'      => 'publish',
    'meta_query'       => array(
        array(
            'key'     => 'external',   // Ключ или имя поля ACF
            'value'   => 0,             // Установите 0 для неотмеченного
            'compare' => '=',
            'type'    => 'NUMERIC',     // Настройте тип в зависимости от типа вашего поля
        ),
    ),
);

$query_internal = new WP_Query( $args_internal );

// Получить внешних участников команды
$args_external = array(
    'posts_per_page'   => -1,
    'orderby'          => 'menu_order',
    'order'            => 'ASC',
    'post_type'        => 'team',
    'post_status'      => 'publish',
    'meta_query'       => array(
        array(
            'key'     => 'external',   // Ключ или имя поля ACF
            'value'   => 1,             // Установите 1 для отмеченного
            'compare' => '=',
            'type'    => 'NUMERIC',     // Настройте тип в зависимости от типа вашего поля
        ),
    ),
);

$query_external = new WP_Query( $args_external );

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

Чтобы отфильтровать посты с использованием ACF (Advanced Custom Fields) по полю checkbox в WordPress, нужно учитывать особенности работы с данными из полей ACF и корректно настроить параметры запроса через WP_Query. В данном случае, поле "external" представляет собой checkbox, что подразумевает наличие либо значения, либо его отсутствие.

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

Получение постов с определённым значением чекбокса

  1. Получение внутренних участников команды (постов, в которых чекбокс "external" не отмечен):
$args_internal = array(
    'posts_per_page'   => -1,
    'orderby'          => 'menu_order',
    'order'            => 'ASC',
    'post_type'        => 'team',
    'post_status'      => 'publish',
    'meta_query'       => array(
        array(
            'key'     => 'external',   // Ключ ACF поля
            'value'   => '0',           // 0 обозначает, что чекбокс не отмечен
            'compare' => '='
        ),
    ),
);

$query_internal = new WP_Query( $args_internal );
  1. Получение внешних участников команды (постов, где чекбокс "external" отмечен):
$args_external = array(
    'posts_per_page'   => -1,
    'orderby'          => 'menu_order',
    'order'            => 'ASC',
    'post_type'        => 'team',
    'post_status'      => 'publish',
    'meta_query'       => array(
        array(
            'key'     => 'external',   // Ключ ACF поля
            'value'   => '1',           // 1 обозначает, что чекбокс отмечен
            'compare' => '='
        ),
    ),
);

$query_external = new WP_Query( $args_external );

Ключевые моменты

  • Тип значения: В ACF поле checkbox возвращает массив значений. Если у вас чекбокс только с одним значением, то необходимо проверять на предмет его наличия, учитывая, что для массивов лучше использовать IN или NOT IN в разделе compare.

  • Тестирование и отладка: Всегда следует проверять правильность работы ваших запросов, особенно если у вас есть другие кастомные поля или конфигурации.

  • Оптимизация: Важно обеспечить оптимальную загрузку запросов, используя posts_per_page => -1 только в том случае, если это действительно необходимо. В большинстве случаев лучше устанавливать лимиты, чтобы избежать потери производительности.

  • Контекст использования: Если ваша структура данных изменяется или используется информация не только с чекбоксами, рекомендуется использовать более сложные meta_query для адекватного фильтрации.

Заключение

Фильтрация постов в WordPress по ACF поля checkbox предоставляет огромное количество возможностей для построения динамичного контента. Правильное использование WP_Query позволяет управлять выводом постов на сайте с учётом специфичных требований, таких как отделение внешних участников от внутренних. Примените описанные подходы и протестируйте их для улучшения функциональности вашего сайта.

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

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