Я пытаюсь получить некоторые страницы в 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 .