Методы и свойства класса WP_Query

Будем считать, что это будет небольшое (но довольно полезное) дополнение к посту про создание циклов при помощи WP_Query.

Сначала я хотел дописать эту часть прямо там в комментариях, но она получилась не такой уж и небольшой, да и к тому же не все люди читают комменты.

Сначала создам объект, он мне ещё пригодится позднее:

$args = array(
	'cat' => 1,
	'posts_per_page' => 5,
	'orderby' => 'comment_count' // WordPress 2.9+
);
 
$myquery = new WP_Query($args);

Свойства:

Во всех последующих примерах будет использоваться объект, созданный в начале поста, ну то есть двумя строчками выше :)

  • $query (массив) — параметры созданного объекта,
    print_r($myquery->query);
    /*
    Array (
    [cat] => 1
    [orderby] => comment_count
    [posts_per_page] => 5
    )
    */
  • $query_vars (массив) — все параметры объекта, включая те, которые не были указаны при создании,
    print_r($myquery->query_vars);
    /*
    Array (
    [cat] => 1
    [posts_per_page] => 5
    [orderby] => comment_count
    [error] =>
    [m] => 0
    [p] => 0
    [post_parent] =>
    [subpost] =>
    [subpost_id] =>
    [attachment] =>
    [attachment_id] => 0
    [name] =>
    [static] =>
    [pagename] =>
    [page_id] => 0
    [second] =>
    [minute] =>
    [hour] =>
    [day] => 0
    [monthnum] => 0
    [year] => 0
    [w] => 0
    [category_name] => uncategorized
    [tag] =>
    [tag_id] =>
    [author_name] =>
    [feed] =>
    [tb] =>
    [paged] => 0
    [comments_popup] =>
    [meta_key] =>
    [meta_value] =>
    [preview] =>
    [s] =>
    [sentence] =>
    [fields] =>
    [category__in] => Array ( [0] => 1 )
    [category__not_in] => Array ( )
    [category__and] => Array ( )
    [post__in] => Array ( )
    [post__not_in] => Array ( )
    [tag__in] => Array ( )
    [tag__not_in] => Array ( )
    [tag__and] => Array ( )
    [tag_slug__in] => Array ( )
    [tag_slug__and] => Array ( )
    [ignore_sticky_posts] =>
    [suppress_filters] =>
    [cache_results] => 1
    [update_post_term_cache] => 1
    [update_post_meta_cache] => 1
    [post_type] =>
    [nopaging] =>
    [comments_per_page] => 50
    [no_found_rows] =>
    [order] => DESC
    )
    */
  • $posts (массив) — содержит запрошенные посты,
  • $post_count (целое) — количество запрошенных постов,
    echo $myquery->post_count;
  • $found_posts (целое) — общее количество постов, удовлетворяющих условиям,
  • $max_num_pages (целое) — общее количество страниц, по сути является отношением $found_posts / $posts_count,
  • $current_post (целое) (доступен только в цикле) — индекс текущего поста при выводе, номер по порядку,
  • $post (объект) (доступен только в цикле) — содержит информацию о текущей записи.
    $obj = $myquery->post;
    /*
    stdClass Object (
    [ID] => 257 [post_author] => 1 
    [post_date] => 2012-04-20 08:45:21 
    [post_date_gmt] => 2012-04-20 08:45:21 
    [post_content] => 
    [post_title] => Liber perfecto definitionem duo ne. 
    [post_excerpt] => 
    [post_status] => publish 
    [comment_status] => open 
    [ping_status] => open 
    [post_password] => 
    [post_name] => liber-perfecto-definitionem-duo-ne
    [to_ping] => 
    [pinged] => 
    [post_modified] => 2012-04-20 08:45:37 
    [post_modified_gmt] => 2012-04-20 08:45:37 
    [post_content_filtered] => 
    [post_parent] => 0 
    [guid] => https://truewp.ru/?p=257 
    [menu_order] => 0 
    [post_type] => post 
    [post_mime_type] => 
    [comment_count] => 1 
    [filter] => raw
    )
    */
    echo $obj->ID;

Методы:

Я не стал включать сюда методы, смысл которых мне непонятен, возможно позднее я их добавлю.

  • init() — инициализация объекта, сбрасывает все свойства класса на NULL, 0 или FALSE
    $myquery->init();
  • get( $query_var ) — вытаскивает один из установленных параметров объекта,
    echo $myquery->get('posts_per_page'); // выведет 5
  • set( $query_var, $value ) — устанавливает значение одного из параметров, кстати ещё один пример использования можно найти в статье про модификацию основного цикла.

    $myquery->set('orderby', 'rand');
  • the_post() (для использования в цикле) — устанавливает глобальную переменную $post, после обращения к этому методу можно использовать такие функции как the_title(), the_content() и прочее.
    $myquery->the_post();
    echo '<h2>'; the_title(); echo '</h2>'; // заголовок
    echo $post->comment_count; // количество комментов
  • have_posts() — определяем, существуют ли записи, удовлетворяющие установленным параметрам, то есть в данном случае, есть ли посты в категории с ID=1, можно использовать при создании цикла:
    if($myquery->have_posts()): 
    	while($myquery->have_posts()):
    		$myquery->the_post();
    		echo '<h2>'; the_title(); echo '</h2>';
    	endwhile;
    endif;

Смотрите также

Комментарии 6

  • Negatiff2 июня 2012 в 15:06 #

    А можно ли использовать

    if($myquery->have_posts()):
       while($myquery->have_posts()):
           $myquery->the_post();
           echo '<h2>'; the_title(); echo '</h2>';
       endwhile;
    endif;

    Несколько раз на странице?

  • Nayami4 апреля 2013 в 02:04 #

    Неполучается через wp_query вывести посты с пагинацией страниц. На следующей странице выводится точно такой же цикл, а не оставшиеся записи. Как это можно исправить?

    • Миша4 апреля 2013 в 06:04 #

      решение здесь

      • Nayami4 апреля 2013 в 17:04 #

        Хм, почему-то невышло. Решилось немного иначе:
        Я временно сохранил пост в переменные, а затем восстановил после цикла.


        have_posts()):

        if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
        //Восстанавливаю значения для избежания ошибки
        $wp_query_news = null; $wp_query_news = $temp;
        endwhile;endif;

  • Nayami4 апреля 2013 в 17:04 #

    Хм, половина кода вырезалась. Вобщем здесь есть похожее решение http://www.wplover.com/756/how-to-get-custom-wp_query-loop-working-with-pagination-and-wp-pagenavi/

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.