第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();?>
答案 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 );