Возможно вам будет легче разобраться с тем, как работает WP_Query в WordPress, если вы посмотрите мой видеоурок по нему.
Будем считать, что это будет небольшое (но довольно полезное) дополнение к посту про создание циклов при помощи WP_Query.
Сначала я хотел дописать эту часть прямо там в комментариях, но она получилась не такой уж и небольшой, да и к тому же не все люди читают комменты.
Сначала создам объект, он мне ещё пригодится позднее:
$args = array( 'cat' => 1, 'posts_per_page' => 5, 'orderby' => 'comment_count' // WordPress 2.9+ ); $myquery = new WP_Query($args);
Во всех последующих примерах будет использоваться объект, созданный в начале поста, ну то есть двумя строчками выше :)
print_r($myquery->query); /* Array ( [cat] => 1 [orderby] => comment_count [posts_per_page] => 5 ) */
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 ) */
echo $myquery->post_count;
$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.agency/?p=257 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 1 [filter] => raw ) */ echo $obj->ID;
Я не стал включать сюда методы, смысл которых мне непонятен, возможно позднее я их добавлю.
$myquery->init();
echo $myquery->get('posts_per_page'); // выведет 5
$myquery->set('orderby', 'rand');
$myquery->the_post(); echo '<h2>'; the_title(); echo '</h2>'; // заголовок echo $post->comment_count; // количество комментов
if($myquery->have_posts()): while($myquery->have_posts()): $myquery->the_post(); echo '<h2>'; the_title(); echo '</h2>'; endwhile; endif;
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
А можно ли использовать
Несколько раз на странице?
да)
Неполучается через wp_query вывести посты с пагинацией страниц. На следующей странице выводится точно такой же цикл, а не оставшиеся записи. Как это можно исправить?
решение здесь
Хм, почему-то невышло. Решилось немного иначе:
Я временно сохранил пост в переменные, а затем восстановил после цикла.
have_posts()):
if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
//Восстанавливаю значения для избежания ошибки
$wp_query_news = null; $wp_query_news = $temp;
endwhile;endif;
Хм, половина кода вырезалась. Вобщем здесь есть похожее решение http://www.wplover.com/756/how-to-get-custom-wp_query-loop-working-with-pagination-and-wp-pagenavi/