Проверить возвращаемое значение get_posts

Я пытаюсь изменить методы WP_Query на get_posts . Но я не уверен, как проверить, является ли get_posts нулевым или имеет значение.

Как я могу преобразовать эту проверку WP_Query в соответствующую проверку get_posts ?

Это мой WP_Query checker:

 $custom_query = new WP_Query($args); if ( $custom_query->have_posts() ) { ... } 

Solutions Collecting From Web of "Проверить возвращаемое значение get_posts"

Из предыдущих вопросов я знаю, что вы хотите оптимизировать свои запросы. Нет необходимости менять WP_Query на get_posts для выполнения. Как я уже сказал в другом сообщении, да, get_posts() быстрее WP_Query потому что get_posts() юридически разбивает разбиение на страницы, но то, что get_posts() можно сделать с помощью WP_Query .

Чтобы понять, что get_posts() , давайте посмотрим на исходный код . По сути, get_posts() выполняет следующее: ( позволяет забыть о бесполезных параметрах в get_posts() )

 $args = [ 'no_found_rows' => true, 'ignore_sticky_posts' => 1 // Any other user passed arguments ]; $r = new WP_Query( $args ); return $r->posts; 

ЧТО ВСЕ ЭТО ЗНАЧИТ

  • get_posts() просто возвращает свойство $posts из объекта запроса. $posts содержит массив сообщений

  • 'no_found_rows' => true – это то, что юридически нарушает разбиение на страницы, и является одной из причин, почему вы не должны использовать get_posts для постраничных запросов. Именно поэтому get_posts() быстрее обычного WP_Query как по умолчанию no_found_rows установлено в false.

Поскольку get_posts() возвращает массив сообщений, а не объект запроса, вы должны использовать обычный цикл foreach для циклического прохождения сообщений. Еще одно замечание: поскольку объект запроса не возвращается, теги шаблонов, такие как the_content() недоступны, потому что $post global не установлен в текущую запись. В обычном цикле the_post() устанавливает postdata, что делает доступными теги шаблонов. Для get_posts() мы должны сделать это вручную, используя setup_postdata( $post ) в нашем цикле foreach

Чтобы правильно пройти через get_posts() , нам нужно сделать что-то вроде этого

 $posts_array = get_posts( $args ); if ( $posts_array ) { // Make sure we have posts before we attempt to loop through them foreach ( $posts_array as $post ) { setup_postdata( $post ); // Now we can use template tags the_title(); the_content(); } wp_reset_postdata(); // VERY VERY IMPORTANT } 

Я бы не прошел все это, чтобы изменить существующие экземпляры WP_Query , чтобы их оптимизировать. Просто добавьте 'no_found_rows' => true в ваши аргументы WP_Query и альт, вы делаете то, что делает get_posts()

Использование простой empty функции.

 $wpse_posts = get_posts( $args ); if ( ! empty( $wpse_posts ) ) { //Do the loop } else { //No post found }