WordPress自定义文章类型分页异常:两页显示相同内容
WordPress自定义文章类型分页异常:两页显示相同内容
嗨,我来帮你排查这个问题~ 其实核心原因很简单:你的WP_Query查询里没加分页参数,WordPress根本不知道当前要加载第几页的内容,所以不管你点到第2页还是第3页,它都会默认返回第一页的10篇文章。
给你几个具体的修改步骤:
- 首先获取当前的页码值:首页的时候
get_query_var('paged')会返回0,所以我们要把它处理成1,代码是这样的:$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; - 把这个页码参数加到你的查询数组里,更新后的
$args_rel应该是这样:$args_rel = array( 'posts_per_page' => 10, 'order' => 'DESC', 'orderby' => 'ID', 'post_type' => 'answer', 'paged' => $paged // 新增的分页参数 ); - 还有个小细节:循环结束后记得重置查询,避免影响页面里的其他查询逻辑,代码是
wp_reset_postdata();,放在循环外面的最后。
修改后的完整代码大概是这样:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args_rel = array( 'posts_per_page' => 10, 'order' => 'DESC', 'orderby' => 'ID', 'post_type' => 'answer', 'paged' => $paged ); $wpex_query = new wp_query( $args_rel ); if ( $wpex_query->have_posts() ) { // 最好加个判断,避免没有文章时出错 foreach( $wpex_query->posts as $post ){ setup_postdata( $post ); // 这里写你的文章内容输出逻辑,比如the_title()、the_content()之类的 } wp_reset_postdata(); }
简单说下原理:paged参数是WP_Query识别当前分页的关键,没加的话它永远只会拉取第一页的数据;而wp_reset_postdata()是用来恢复全局的$post变量,防止自定义查询影响后续的默认查询(比如侧边栏的文章列表)。
备注:内容来源于stack exchange,提问作者Pavel Vainshtein
相关产品推荐
相关产品推荐

