ACF自定义文章类型URL修改后WordPress分页导航失效求助
解决自定义文章类型 permalink 修改后分页 404 的问题
问题根源
你修改了自定义文章类型的 permalink slug,但 WordPress 的重写规则未同步更新,同时分页导航的 URL 生成逻辑没适配新 slug,导致点击分页时出现页面找不到的错误。
分步解决:
1. 修正自定义文章类型注册参数
检查你注册「client-story」自定义文章类型的代码,确保rewrite和has_archive参数配置正确,指定新的 slug 并开启分页支持:
register_post_type( 'client-story', array( // 其他原有参数(比如labels、public等)保持不变 'rewrite' => array( 'slug' => 'client-stories', // 设置你需要的新 permalink slug 'with_front' => false, // 避免继承主固定链接的前缀(如/blog/) 'pages' => true // 明确开启分页支持 ), 'has_archive' => 'client-stories', // 归档页的slug也设为新值 ) );
如果之前注册时没配置这些参数,现在补上即可。
2. 刷新 WordPress 重写规则
修改注册参数后,必须刷新重写规则才能让新 URL 结构生效:
- 登录后台,进入「设置」→「固定链接」
- 无需更改任何设置,直接点击「保存更改」,WordPress 会自动刷新重写规则。
3. 调整分页导航的 URL 生成逻辑
你当前代码里的base参数用get_pagenum_link(1)可能生成不符合新 slug 的 URL,换成自定义文章类型的归档页 URL 作为分页基础:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'client-story', 'post_status' => 'publish', 'posts_per_page' => 9, 'paged' => $paged, ); $loop = new WP_Query($args); $total_pages = $loop->max_num_pages; if ($total_pages > 1){ $current_page = max(1, get_query_var('paged')); // 获取自定义文章类型归档页的正确URL $archive_url = trailingslashit(get_post_type_archive_link('client-story')); echo '<div class="pagination_wrapper">'; echo paginate_links(array( 'base' => $archive_url . '%_%', // 用归档页URL作为分页基础 'format' => 'page/%#%', 'current' => $current_page, 'total' => $total_pages, 'prev_text' => __('Prev'), 'next_text' => __('Next'), )); echo '</div>'; }
修改后生成的分页 URL 会变成/client-stories/page/2/这类正确格式,不会再出现404。
额外适配(如果用自定义页面模板展示内容)
如果你不是用归档页,而是用自定义页面模板来显示客户案例,需要在主题的functions.php中添加代码,让该页面支持paged参数识别:
function custom_page_pagination_support($query) { // 把"your-page-slug"换成你用来展示案例的页面slug if ( is_page('your-page-slug') && $query->is_main_query() ) { $query->set('paged', get_query_var('paged')); } } add_action('pre_get_posts', 'custom_page_pagination_support');
内容的提问来源于stack exchange,提问作者Manjil Ghale
相关产品推荐
相关产品推荐

