自定义文章类型短码分页异常:每页返回相同内容
短码分页内容重复问题的解决方法
你的分页功能显示正常但内容重复,核心问题出在WP_Query的参数设置和内容拼接逻辑上,以下是具体修复步骤:
问题排查与修复点
1. paged参数错误设置
你在$args里给paged赋值了带HTML标签的字符串,这会导致WP_Query无法正确识别页码,始终返回第一页内容:
'paged' => '<li>'.( get_query_var('paged') ? get_query_var('paged') : 1).'</li>'
修复:直接传递页码数值,去掉多余的HTML标签:
'paged' => get_query_var('paged') ? get_query_var('paged') : 1
2. 错误的状态参数publish_status
WP_Query中没有publish_status这个参数,正确的参数是post_status,值为'publish':
'post_status' => 'publish'
3. 内容拼接逻辑错误
循环里你用$result = 'fetching some stuff';每次都会覆盖之前的内容,应该用.=来累加内容,并且要先初始化$result为空字符串,避免未定义的问题。
4. 完整修复后的代码
function shortcode_paginated_list() { // 初始化结果变量 $result = ''; $args = array( 'post_type' => 'my_custom_post_type', 'posts_per_page' => 2, // 直接用数字更规范 'post_status' => 'publish', 'paged' => get_query_var('paged') ? get_query_var('paged') : 1 ); $wp_query = new WP_Query($args); if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); // 累加内容,替换成你实际的内容获取逻辑 $result .= '<div class="post-item">'; $result .= '<h3>' . get_the_title() . '</h3>'; $result .= '<p>' . get_the_excerpt() . '</p>'; $result .= '</div>'; endwhile; else : // 没有内容时的提示 $result .= '<p>暂无内容</p>'; endif; $big = 999999999; $paginate = paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'prev_text' => __('<i class="fas fa-angle-left"></i>'), 'next_text' => __('<i class="fas fa-angle-right"></i>'), 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'type' => 'list' ) ); if ( $paginate ) { $result .= '<div class="blog-nav">' . str_replace( "<ul class='page-numbers'>", '<ul class="pagination">', $paginate ) . '</div>'; } wp_reset_postdata(); return $result; } add_shortcode( 'paginated-list', 'shortcode_paginated_list' );
额外说明
- 确保你的自定义文章类型
my_custom_post_type确实存在,并且有足够多的已发布内容来触发分页。 - 内容部分替换成你实际需要展示的字段,比如标题、内容、自定义字段等。
内容的提问来源于stack exchange,提问作者lighthousejack
相关产品推荐
相关产品推荐

