Я пытаюсь получить некоторые страницы в wordpress с помощью WP_Query
и некоторые аргументы:
$args = array( 'post_type' => 'posttype', 'posts_per_page' => 24, 'post__in' => $store_ids, 'paged' => $paged, 'post_status' => 'publish', ); $the_query = new WP_Query( $args );
Страницы, которые я пытаюсь получить здесь, должны соответствовать идентификатору в массиве идентификаторов, которые я ему дал. Массив и другие аргументы кажутся прекрасными, так как я получаю свои результаты, когда я использую get_posts
вместо WP_Query
. Что здесь происходит?
Моя образованная догадка заключается в том, что у вас плохо написанный фильтр где-то в вашей теме, который действует на WP_Query
, и это, скорее всего, действие pre_get_posts
.
get_posts
использует WP_Query
. Единственное различие заключается в том, что WP_Query
по умолчанию передает следующие два аргумента WP_Query
:
'no_found_rows' => true
который «сбой» 'no_found_rows' => true
страницы, поэтому вы не можете get_posts
страницы get_posts
'suppress_filters' =>true
Это важно, что это такое, он не позволяет фильтрам изменять запрос. Таким образом, pre_get_posts
и встроенные фильтры posts_*
не могут использоваться для изменения get_posts
. Вот почему в вашем случае вы получаете сообщения, используя get_posts
и ни один из WP_Query
не использует WP_Query
Грязное исправление здесь заключается в том, чтобы добавить 'suppress_filters' => true
к вашим аргументам запроса в WP_Query
. Правильным решением будет поиск фильтра, изменяющего запрос. Как я уже сказал, скорее всего, pre_get_posts
где вы не использовали is_main_query()
чтобы просто настроить основной запрос
Используйте wp_reset_query()
после строки WP_Query
.