You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中使用WP_Query查询产品时分页链接不显示求助

解决WP_Query自定义查询下分页链接不显示的问题

嘿,这个分页坑我之前也踩过!问题出在next_posts_link()和previous_posts_link()这两个函数默认是依赖全局的$wp_query对象的,而你用的是自己创建的$loop自定义查询对象,所以它们找不到正确的分页数据,自然就不显示链接了。

给你两个靠谱的解决方案,优先用第一个:

方案一:给分页函数传入自定义查询的总页数

next_posts_link()的第二个参数可以指定查询的总页数,也就是你的$loop->max_num_pages,这样函数就能识别到自定义查询的分页信息了。另外注意,用完自定义查询后应该用wp_reset_postdata()而不是wp_reset_query()——后者是用来恢复被query_posts()修改的全局查询,而你用的是WP_Query,恢复全局$post对象用wp_reset_postdata()更合适。

修改后的完整代码:

<?php 
// 获取当前页码,静态首页需要特殊处理(后面会说)
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; 

$args = array( 
    'post_type' => 'product', 
    'posts_per_page' => 3, 
    'paged' => $paged 
); 
$loop = new WP_Query( $args ); 

while ( $loop->have_posts() ) : $loop->the_post(); 
    global $product; 
    echo '<br /><a href="'.get_permalink().'">' . woocommerce_get_product_thumbnail().' '.get_the_title().'</a>'; 
endwhile; 

// 给next_posts_link传入自定义查询的总页数
next_posts_link( '下一页', $loop->max_num_pages ); 
previous_posts_link( '上一页' ); 

// 恢复全局$post对象
wp_reset_postdata(); 
?>

额外提示:静态首页的页码获取

如果你的分页是在静态首页(后台「设置-阅读」里把首页设为了静态页面),那get_query_var('paged')会取不到值,这时候要改用get_query_var('page'),可以把页码获取的代码改成这样:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
// 静态首页特殊处理
if ( is_front_page() && !is_home() ) {
    $paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
}

方案二:临时替换全局$wp_query对象(不推荐,仅特殊场景用)

这个方法是把自定义查询对象临时赋值给全局的$wp_query,让分页函数误以为是默认查询,用完再恢复。但这个方法可能干扰全局查询的状态,所以除非万不得已,优先用方案一。

代码示例:

<?php 
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; 
if ( is_front_page() && !is_home() ) {
    $paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
}

$args = array( 
    'post_type' => 'product', 
    'posts_per_page' => 3, 
    'paged' => $paged 
); 

// 保存全局查询的备份
$temp_query = $wp_query; 
$wp_query = new WP_Query( $args ); 

while ( $wp_query->have_posts() ) : $wp_query->the_post(); 
    global $product; 
    echo '<br /><a href="'.get_permalink().'">' . woocommerce_get_product_thumbnail().' '.get_the_title().'</a>'; 
endwhile; 

// 现在分页函数可以正常工作了
next_posts_link( '下一页' ); 
previous_posts_link( '上一页' ); 

// 恢复全局查询
$wp_query = $temp_query; 
wp_reset_postdata(); 
?>

按照方案一修改后,你的分页链接应该就能正常显示啦!

内容的提问来源于stack exchange,提问作者yogihosting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:10:38