Запрос возвращает те же результаты, даже несмотря на изменение идентификатора

$topics = query_posts( array( 'post_type' => 'topics', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array( 'key' => 'forum_category', 'value' => $forum_id, 'compare' => '=' ) ) ); 

Кажется, не имеет никакого значения для этого запроса то, что вы задали для $ forum_id, он просто загружает все темы для всех входов в forum_category … Любые идеи, что может вызвать это?

Чтобы быть понятным, это функция, вызываемая в цикле, поэтому, когда функция вызывается $ forum_id, устанавливается get_the_id ()

Вы можете передать свой мета-запрос в query_posts или (предпочтительный) WP_Query двумя способами:

  1. Массив с использованием ключей массива meta_key , meta_value , meta_type и meta_compare
  2. Массив массивов с использованием key , value , type и compare

В вашем вопросе вы пытались использовать сочетание этих двух, и именно поэтому он не работал.

1. Массив с использованием ключей массива meta_key , meta_value , meta_type и meta_compare

Так вы пытались сделать это в своем вопросе, но meta_query должен был использовать следующие ключи массива:

 $args = array( 'post_type' => 'topics', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array( 'meta_key' => 'forum_category', 'meta_value' => $forum_id, 'meta_compare' => '=' ) ) ); 

2. Массив массивов с использованием key , value , type и compare

Из Codex для WP_Query :

Важное примечание : meta_query принимает массив массивов аргументов мета-запроса (он принимает массив массивов) – вы можете увидеть это в приведенных ниже примерах. Эта конструкция позволяет запрашивать несколько метаданных с помощью параметра отношения в первом (внешнем) массиве для описания логических отношений между мета-запросами.

 $args = array( 'post_type' => 'topics', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => 'forum_category', 'value' => $forum_id, 'compare' => '=' ) ) ) ); 

Преимущество использования этого способа заключается в том, что вы можете добавить несколько meta_queries для уточнения результатов, например, вы могли бы получить все сообщения, где и forum_category = $ forum_id AND forum_moderator = $ moderator_name

 $args = array( 'post_type' => 'topics', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array( 'relation' => 'AND', // this could also be "OR" array( 'key' => 'forum_category', 'value' => $forum_id, 'compare' => '=' ), array( 'key' => 'forum_moderator', 'value' => $moderator_name, 'compare' => '=' ), ) ) ); 

Ссылка : см. Codex for WP_Query для получения дополнительной информации и примеров.

Примечание . Я понимаю, что вы нашли ответ, но я подумал, что дополнительная информация и альтернативное использование могут оказаться полезными – даже если не вам, а затем другим пользователям, ищущим аналогичную проблему.

Изменение запроса:

  $topics = query_posts( array( 'post_type' => 'topics', 'meta_query' => array( array( 'key' => 'forum_category', 'value' => $forum_id ) ) ) ); 

исправлено это, я думаю, мета-запрос должен был быть в двойном массиве? Я не вижу никакой разницы, кроме этого …