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

WordPress自定义post_type_link生效但单页面跳转404求助

问题根源

你修改了自定义文章类型的 permalink 结构,但未给 WordPress 配置对应的URL解析规则,同时代码里存在几个细节错误,导致访问触发404。

具体修复步骤

1. 修正post_type_link钩子函数

原函数里用get_the_ID()不可靠,优先级设置过低,且str_replace属于冗余写法,直接修改如下:

function tpcl_post_permalinks( $post_link, $post ) {
    // 直接使用钩子传入的post对象ID,避免上下文错误
    $tpcl_meta = get_post_meta( $post->ID, '_tpcl_post_tmeta', true );
    
    if ( 'tpcl_mtr' === $post->post_type ) {
        $permalink = home_url( 'tpcl/'. $tpcl_meta . '/mtr/' . $post->post_name );
    } elseif ( 'tpcl_utr' === $post->post_type ){
        $permalink = home_url( 'tpcl/'. $tpcl_meta . '/utr/' );
    } else{
        $permalink = $post_link;
    }
    return $permalink;
}
// 调高优先级到10,确保覆盖默认行为
add_filter('post_type_link', 'tpcl_post_permalinks', 10, 2);

2. 添加重写规则

让WordPress能识别你自定义的URL结构,添加对应解析规则:

function tpcl_add_rewrite_rules() {
    // 匹配 tpcl/{自定义字段值}/mtr/{文章别名} 结构,映射到tpcl_mtr类型文章
    add_rewrite_rule(
        '^tpcl/([^/]+)/mtr/([^/]+)/?$',
        'index.php?post_type=tpcl_mtr&name=$matches[2]',
        'top'
    );
    
    // 匹配 tpcl/{自定义字段值}/utr/ 结构,映射到tpcl_utr类型文章
    // 注意:需保证_tpcl_post_tmeta的值对每个tpcl_utr文章唯一,否则会出现匹配冲突
    add_rewrite_rule(
        '^tpcl/([^/]+)/utr/?$',
        'index.php?post_type=tpcl_utr&meta_key=_tpcl_post_tmeta&meta_value=$matches[1]',
        'top'
    );
}
add_action( 'init', 'tpcl_add_rewrite_rules' );

3. 调整自定义文章类型注册配置

注册时关闭rewrite的with_front选项,避免和默认固定链接前缀冲突:

function tpcl_custom_post_types() {
    register_post_type( 'tpcl_mtr',
        array(
            'public' => true,
            'query_var' => true,
            'rewrite' => array( 
                'slug' => 'tpclmtr',
                'with_front' => false
            ),
            'hierarchical' => true,
            'supports' => array('title', 'editor', 'thumbnail')
        )
    );

    register_post_type( 'tpcl_utr',
        array(
            'public' => true,
            'query_var' => true,
            'rewrite' => array( 
                'slug' => 'tpclutr',
                'with_front' => false
            ),
            'hierarchical' => true,
            'supports' => array('title', 'editor', 'thumbnail')
        )
    );
}
add_action( 'init', 'tpcl_custom_post_types' );

4. 刷新固定链接缓存

完成代码修改后,登录WordPress后台进入设置→固定链接,无需修改任何选项,直接点击「保存更改」。这一步会刷新WordPress的重写规则缓存,让新配置生效。

额外提示

  • 若tpcl_utr的URL需要包含文章别名以避免冲突,可将permalink生成代码改为home_url( 'tpcl/'. $tpcl_meta . '/utr/' . $post->post_name ),同时把对应的重写规则调整为:
    add_rewrite_rule(
        '^tpcl/([^/]+)/utr/([^/]+)/?$',
        'index.php?post_type=tpcl_utr&name=$matches[2]',
        'top'
    );
    

内容的提问来源于stack exchange,提问作者Mary X Nabors

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:46:22