Home
›
News
Методы и свойства класса WP_Query
02.09.2018
Будем считать, что это будет небольшое (но довольно полезное) дополнение к посту про создание циклов при помощи 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://misha.blog/?p=257
[menu_order] => 0
[post_type] => post
[post_mime_type] =>
[comment_count] => 1
[filter] => raw
)
*/
echo $obj -> ID ; |
Методы:
Я не стал включать сюда методы, смысл которых мне непонятен, возможно позднее я их добавлю.
init() — инициализация объекта, сбрасывает все свойства класса на NULL, 0 или FALSE
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 ; |
Смотрите также