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

自定义Permalink标签生效但所有文章返回404错误如何解决

问题原因

你的代码存在两处核心问题,直接导致404报错:

  1. 变量名书写错误:你在获取父分类ID时使用了未定义的$term变量,实际前面查询到的分类变量为$terms,变量名少了字母s,会导致父分类取值失败。
  2. 缺少重写规则注册:你只实现了「生成链接时替换%region%占位符」的逻辑,没有给WordPress注册对应重写规则,WordPress无法识别URL中%region%对应位置的参数含义,自然无法匹配到对应文章,返回404。

修复代码

首先修正原有permalink生成函数的错误,同时建议使用分类别名(slug)替代分类名称放入URL,避免特殊字符、中文导致的URL异常:

add_filter('post_link', 'region_cat_permalink', 10, 3);
add_filter('post_type_link', 'region_cat_permalink', 10, 3);
 
function region_cat_permalink($permalink, $post_id, $leavename) {
    if (strpos($permalink, '%region%') === FALSE) return $permalink;
    
    $post = get_post($post_id);
    if (!$post) return $permalink;
    $terms = get_the_category($post->ID);

    if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]) && $terms[0]->parent > 0) {
        // 用分类别名而非名称,更适合URL
        $parentterm = get_term_field('slug', $terms[0]->parent, 'category');
    } else {
        $parentterm = 'eu';
    }

    return str_replace('%region%', $parentterm, $permalink);
}

然后新增重写标签和重写规则注册代码,告诉WordPress如何解析带%region%的URL:

// 注册自定义重写标签
add_action('init', 'add_region_rewrite_tag');
function add_region_rewrite_tag() {
    add_rewrite_tag('%region%', '([^/]+)');
}

// 注册对应重写规则,优先级设为最高避免被默认规则覆盖
add_action('init', 'add_region_rewrite_rule');
function add_region_rewrite_rule() {
    // 请根据你实际的固定链接结构调整正则规则,示例适配/%region%/%postname%/的结构
    add_rewrite_rule(
        '^([^/]+)/([^/]+)/?$',
        'index.php?name=$matches[2]&region=$matches[1]',
        'top'
    );
}

后续操作

代码部署完成后,进入WordPress后台「设置」-「固定链接」页面,无需修改任何配置,直接点击「保存更改」按钮刷新重写规则,再清空所有缓存测试即可。

如果你的固定链接结构包含其他前缀(如/blog/%region%/%postname%/),需要对应调整重写规则中的正则表达式,匹配你实际的URL层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:09:01