Заданное количество постов с 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'   => '>=',
		)
	)       
);  
0
lethalblo
6.6 лет назад 53
  • 0
    Glomberg 139 viktor-web.ru

    Здравствуйте.
    Параметр запроса 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
    }
    lethalblo 6.6 лет назад

    Работает но не совсем так как хотелось бы, поскольку выводит страниц страниц больше 10, но записи есть только на 10 страницах, остальные пустые.
    Вот весь код

    global $wp_query;
    
    	$foo = $wp_query;
    	$args = array(
    
    		'paged'          => $paged,       
    		'post_type'      => 'post', 
    		'posts_per_page' => 1, 
    		'meta_key' => 'ratings_average',
    		'orderby' => 'meta_value_num',
    		'order' => 'DESC',
    		'numberposts' => 1,
       'meta_query' => array(
    	   array(
    		   'key' => 'ratings_users',
    		   'value' => 2,
    		   'compare'   => '>=',
    	   ))); 
    
    $my_post = new WP_Query( $args );?>
    <?php $wp_query = $my_post;?>
    
    <?php if($my_post->have_posts()) : ?>
    <?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; ?>
    Glomberg 6.6 лет назад
    //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; ?>
    lethalblo 6.6 лет назад

    Пагинация не выводится, может переделать код под numberposts ? только непонятно как это сделать

    Glomberg 6.6 лет назад

    Попробуйте так (комментарии стоят ради информации для размышления, уберите их сами):

    //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; ?>
    Glomberg 6.6 лет назад

    Кажется, не будет работать... В функции get_posts() нет параметра paged... sad

    lethalblo 6.6 лет назад

    не работает

    lethalblo 6.6 лет назад

    ладно пока оставлю, как есть. Спасибо за помощь

    Комментировать
  • 0
    kolshix 784 paxtoy.com

    не могу найти статью - так же как и вы с этой "ХЕРНЕЙ" боролся.
    Попробую пересказать в двух словах с учетом вашей проблемы.
    Есть 2 штуки QUERY - 1-й Вордпресовский и 2-й ваш с "'numberposts'=> 100" в итоге получается кривой QUERY Ваш+ВП - который работает 50на50

    К сожалению сам так и не понял как правильно сделать и пришлось пользоваться одним от WP и выводит на всей страницах одинаковое количество, а хотелось под каждую категорию выводить свое количество!

    везде пишут что нужно создавать новый независимый запрос - а как правельно не пишут

    lethalblo 6.6 лет назад

    Честно говоря я пока решил оставить как есть. Если найдете решение делитесь с ним в данном вопросе. Я хотел рейтинг записей сделать топ 100, но сейчас просто по рейтингу)

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация