Как запрашивать сообщения по мета-ключам И по определенной категории?

Сценарий:

Я работаю в системе обзора для WordPress, веб-сайта обзора игр. Он использует сообщения по умолчанию, которые в категории «обзор» показывают мета-поля обзора (из плагина ACF). Это довольно обычное дело, никаких секретов.

Разница: используя персонализированный тип сообщения, другая страница «поймает» данные из обзоров и покажет средний балл этой игры из X-обзоров.

Итак, если у меня есть два отзыва «Mortal Kombat», общая информационная страница – пользовательская почта «игра» – будет запрашивать отзывы с помощью slug «review-mortal-kombat-snes», рассчитать средний балл по каждому критерию ( графика, звук и т. д.) и показать его как графическую информацию.

Система обзора готова и работает нормально, но у меня есть проблема, чтобы поймать только данные отзывов на странице «игры». Это WP_Query, который я пытаюсь использовать для поиска отзывов:

$args = array( 'numberposts' => -1, 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'review', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'acf_gametitle', 'value' => $newtitle, 'compare' => '=' ), array( 'key' => 'acf_platform', 'value' => $catconsole, 'compare' => '=' ) ) ); $the_query = new WP_Query( $args ); 
  1. «acf_gametitle» – это мета-поле с названием игры (из обзоров).

  2. $ newtitle хранит название игры (со страницы игры).

  3. «acf_platform», конечно же, хранит платформу (SNES, Sega Genesis и т. д.).

  4. $ catconsole хранит пользовательскую категорию игровой страницы (название платформы).

Что мне нужно:

Во-первых , запрос для типа post post, с категорией «обзор», где пользовательское поле «acf_gametitle» имеет одинаковое значение var $ newtitle с игровой страницы.

Итак, если страница о «Mortal Kombat», она должна найти все отзывы с названием «Mortal Kombat».

И второе : пользовательское поле «acf_platform» из обзора должно иметь одинаковое значение var «$ catconsole».

Таким образом, он не получит значений от обзоров Mortal Kombat до SNES и аркады – только подходящая платформа.

Он не работает, продолжает давать мне данные из обзоров всех консолей: Mortal Kombat от SNES и аркады считаются «двумя отзывами для Mortal Kombat» на странице SNES игры:

 $string_count = $the_query->found_posts; echo $string_count; 

Что-то не так? Заранее благодарю за любую помощь.

Вы используете флажок или аналогичный для поля acf_platform, используя ACF для нескольких вариантов?

Расширенные пользовательские поля сохраняют их как сериализованный массив, поэтому meta_query с 'compare' => '=' может не работать.

В документации ACF предлагается использовать 'compare' => 'LIKE'

 $args = array( 'meta_query' => array( array( 'key' => 'field_name', // name of custom field 'value' => '"red"', // matches exaclty "red", not just red. This prevents a match for "acquired" 'compare' => 'LIKE' ) ) ); 

http://www.advancedcustomfields.com/resources/checkbox/


EDIT: На самом деле, я понял, что если это так, ваш запрос не должен возвращать никаких результатов. Вы упомянули, что вернули обе должности, так что это может быть не так.

Он не работает, продолжает давать мне данные из обзоров всех консолей: Mortal Kombat от SNES и аркады считаются «двумя отзывами для Mortal Kombat» на странице SNES игры …

Это работает. Код в порядке, я только что сделал небольшую ошибку: в категории «snes» было два отзыва, я забыл изменить один из них при тестировании. Я добавил только один («ignore_sticky_posts» => 1). Глупая ошибка, извините.