Заданное количество постов с wp_query
Вывожу посты вот таким образом, есть пагинация, нужно сделать чтобы выводились не все посты а только первые 100
global $wp_query; $foo = $wp_query; $args = array( 'paged' => $paged, 'post_type' => 'post', 'posts_per_page' => 10, 'meta_key' => 'ratings_average', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_query' => array( array( 'key' => 'ratings_users', 'value' => 2, 'compare' => '>=', ) ) );
Здравствуйте.
Параметр запроса numberposts работает в функции get_posts();.
Вы, видимо, по-другому получаете записи.
Попробуйте использовать условие:
global $wp_query; if( get_query_var('paged') <= 10 ){ $foo = $wp_query; $args = array( 'paged' => $paged, 'post_type' => 'post', 'posts_per_page' => 10, 'meta_key' => 'ratings_average', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_query' => array( array( 'key' => 'ratings_users', 'value' => 2, 'compare' => '>=', ) ) ); // Тут выполняем запрос с параметрами $args }Работает но не совсем так как хотелось бы, поскольку выводит страниц страниц больше 10, но записи есть только на 10 страницах, остальные пустые.
Вот весь код
//global $wp_query; //$foo = $wp_query; // Так как вы создаете новый экземпляр WP_Query(), // то вам не нужно сохранять текущий поисковый запрос // и возвращаться к его исходному состоянию после цикла. $args = array( 'paged' => $paged, 'post_type' => 'post', 'posts_per_page' => 1, 'meta_key' => 'ratings_average', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_query' => array( array( 'key' => 'ratings_users', 'value' => 2, 'compare' => '>=', ) ) ); $my_post = new WP_Query( $args );?> <?php //$wp_query = $my_post;?> <?php // Условие должно выполняться одновременно: есть посты в запросе и текущая страница не больше десятой ?> <?php if( $my_post->have_posts() && get_query_var('paged') <= 10 ) : ?> <?php while( $my_post->have_posts() ) : $my_post->the_post(); ?> //пост <?php endwhile; endif; ?> <div style="clear:both"></div> <div class="page-nav"><?php theme_page_navigation(); ?></div> <?php //$wp_query = $foo; ?>Пагинация не выводится, может переделать код под numberposts ? только непонятно как это сделать
Попробуйте так (комментарии стоят ради информации для размышления, уберите их сами):
//global $wp_query; //$foo = $wp_query; // Так как вы создаете новый экземпляр WP_Query(), // то вам не нужно сохранять текущий поисковый запрос // и возвращаться к его исходному состоянию после цикла. $args = array( // Непонятно, как получается переменная $paged 'paged' => $paged, 'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ), 'post_type' => 'post', 'posts_per_page' => 1, 'meta_key' => 'ratings_average', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'numberposts' => 100 'meta_query' => array( array( 'key' => 'ratings_users', 'value' => 2, 'compare' => '>=', ) ) ); $my_post = get_posts( $args );?> <?php //$wp_query = $my_post;?> <?php foreach( $my_posts as $post ) : ?> <?php setup_postdata($post); ?> // пост <?php endforeach; ?> <?php wp_reset_postdata(); ?> <div style="clear:both"></div> <div class="page-nav"><?php theme_page_navigation(); ?></div> <?php //$wp_query = $foo; ?>Кажется, не будет работать... В функции get_posts() нет параметра paged...
не работает
ладно пока оставлю, как есть. Спасибо за помощь
не могу найти статью - так же как и вы с этой "ХЕРНЕЙ" боролся.
Попробую пересказать в двух словах с учетом вашей проблемы.
Есть 2 штуки QUERY - 1-й Вордпресовский и 2-й ваш с "'numberposts'=> 100" в итоге получается кривой QUERY Ваш+ВП - который работает 50на50
К сожалению сам так и не понял как правильно сделать и пришлось пользоваться одним от WP и выводит на всей страницах одинаковое количество, а хотелось под каждую категорию выводить свое количество!
везде пишут что нужно создавать новый независимый запрос - а как правельно не пишут
Честно говоря я пока решил оставить как есть. Если найдете решение делитесь с ним в данном вопросе. Я хотел рейтинг записей сделать топ 100, но сейчас просто по рейтингу)