分页不适用于Loop

时间:2014-07-19 23:07:49

标签: sorting loops pagination wordpress

第2页显示与第1页相同的帖子。可能是什么问题? 以下是index.php中的代码。它用于通过简单地点击链接来排序帖子,例如排序:“price”或“random”。

分页

<?php
    previous_posts_link();
    next_posts_link();
?>

循环

<?php

$sort= $_GET['sort'];

if($sort == "A")
    {
    $order= "orderby=rand&posts_per_page =2";
    }

if($sort == "B")
    {
    $order= array (
        'meta_key'=>'price', 
        'orderby'=>'meta_value_num',  
        'order'=>'DESC', 
        'posts_per_page' => 2
    );
    }
?>


<a href="?sort=A">random</a>
<a href="?sort=B">price</a>


<?php $loop = new WP_Query($order); ?><?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
    <?php    the_excerpt(); the_meta ();?>
<?php endwhile; wp_reset_query();?>

2 个答案:

答案 0 :(得分:0)

如果您想使用自定义WP_Query并仍希望分页起作用,则必须传入paged参数。

// what page is this? default to 1.
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;

// "A" args
$order = "orderby=rand&posts_per_page=2&paged={$paged}";

// "B" args
$order = array (
    'meta_key'=>'price', 
    'orderby'=>'meta_value_num',  
    'order'=>'DESC', 
    'posts_per_page' => 2,
    'paged' => $paged,
);

答案 1 :(得分:0)

Yourt问题是使用自定义查询。为什么你没有使用主查询。在这里运行另一个查询完全没有必要并浪费资源。

由于此代码位于index.php上,这将是您的主页,您可以简单地使用默认循环,并使用pre_get_posts在运行之前更改主查询。这样做并不需要额外的不必要的数据库查询,而且更清晰

因此,删除index.php中的自定义查询,并将其替换为以下代码。这就是你需要的所有东西(并且不要滥用php标签: - ))

<?php while (have_posts() ) : the_post(); ?>
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
    <?php  the_excerpt(); the_meta ();
endwhile; 

  previous_posts_link();
  next_posts_link();
?>

现在,在functions.php中,添加以下内容

function my_custom_query($query){
 if ( $query->is_home() && $query->is_main_query() ) {

   $sort= $_GET['sort'];

   if($sort == "A"){
     $query->set( 'orderby', 'rand' );
     $query->set( 'posts_per_page', '2' );
   }

   if($sort == "B"){
     $query->set( 'meta_key', 'price' );
     $query->set( 'orderby', 'meta_value_num' );
     $query->set( 'order', 'DESC' );
     $query->set( 'posts_per_page', '2' );
    }
 }
}

add_action( 'pre_get_posts', 'my_custom_query' );

如果由于某种原因需要运行自定义查询,请记住将分页变量添加到参数中。您可以在WP_Query

中查看这些参数
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$loop = new WP_Query( array( 'paged' => $paged ) );

但这还不够。您需要在next_posts_link( $label , $max_pages );中设置$max_pages参数以使分页正常工作。你需要这样的东西

next_posts_link( 'Older Entries', $loop->max_num_pages );