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

无需插件修改WordPress固定链接:替换分类标签前缀并添加/blog

解决WordPress固定链接:移除分类/标签前缀并添加/blog前缀的完整方案

我帮你梳理了一套完整的解决方案,能完美实现你想要的URL结构,不用依赖插件,纯后台设置加少量代码就能搞定:

一、基础后台设置

首先调整固定链接的基础配置:

  1. 进入WordPress后台「设置」→「固定链接」
  2. 在「自定义结构」中填入:/blog/%category%/%postname%/
  3. 找到页面下方的「分类基础」,填入空值(直接删除默认的category,留空);「标签基础」同样填入空值(删除默认的tag)
  4. 暂时不要点击保存,先往下看代码配置

二、添加自定义代码(核心步骤)

仅靠后台设置无法同时满足分类/标签归档的/blog前缀和子分类的URL结构,需要添加代码来调整Rewrite规则和链接生成逻辑。

你可以把以下代码添加到子主题的functions.php文件中(推荐用子主题,避免主题更新丢失代码),或者使用「Code Snippets」插件来导入代码更安全:

1. 处理分类归档的URL规则

// 调整分类归档的Rewrite规则,添加/blog前缀并支持子分类
function custom_category_rewrite_rules() {
    global $wp_rewrite;
    // 移除默认的分类Rewrite规则
    foreach ($wp_rewrite->rules as $rule => $query) {
        if (strpos($rule, 'category/') === 0) {
            unset($wp_rewrite->rules[$rule]);
        }
    }
    // 添加新的分类规则,支持多级子分类
    $wp_rewrite->add_rule('blog/(.+?)/?$', 'index.php?category_name=$matches[1]', 'top');
}
add_action('generate_rewrite_rules', 'custom_category_rewrite_rules');

// 修改前台分类链接的生成逻辑,确保输出/blog开头的URL
function custom_category_permalink($link, $category) {
    if (is_object($category)) {
        $category_slug_path = $category->slug;
        // 递归拼接父分类slug(支持多级子分类)
        $parent_id = $category->parent;
        while ($parent_id) {
            $parent_cat = get_category($parent_id);
            $category_slug_path = $parent_cat->slug . '/' . $category_slug_path;
            $parent_id = $parent_cat->parent;
        }
        return home_url('/blog/' . $category_slug_path . '/');
    }
    return $link;
}
add_filter('category_link', 'custom_category_permalink', 10, 2);

2. 处理标签归档的URL规则

// 调整标签归档的Rewrite规则,添加/blog前缀
function custom_tag_rewrite_rules() {
    global $wp_rewrite;
    // 移除默认的标签Rewrite规则
    foreach ($wp_rewrite->rules as $rule => $query) {
        if (strpos($rule, 'tag/') === 0) {
            unset($wp_rewrite->rules[$rule]);
        }
    }
    // 添加新的标签规则
    $wp_rewrite->add_rule('blog/(.+?)/?$', 'index.php?tag=$matches[1]', 'top');
}
add_action('generate_rewrite_rules', 'custom_tag_rewrite_rules');

// 修改前台标签链接的生成逻辑,确保输出/blog开头的URL
function custom_tag_permalink($link, $tag) {
    if (is_object($tag)) {
        return home_url('/blog/' . $tag->slug . '/');
    }
    return $link;
}
add_filter('tag_link', 'custom_tag_permalink', 10, 2);

三、重置Rewrite规则

回到「设置」→「固定链接」页面,点击**「保存更改」**按钮——这一步会自动更新你的.htaccess文件,生成新的Rewrite规则,无需手动修改.htaccess。

四、配置博客首页(/blog)

要实现www.example.com/blog展示所有文章的需求:

  1. 在后台「页面」→「新建页面」,创建一个标题为「Blog」的空白页面(无需添加内容)
  2. 进入「设置」→「阅读」,在「你的首页显示」中选择「静态页面」:
    • 「首页」选择你原来的站点首页(比如「Home」页面)
    • 「文章页」选择刚刚创建的「Blog」页面
  3. 保存设置,现在访问/blog就会显示所有文章列表了

五、测试所有场景

现在你可以逐一验证你需要的URL结构:

  1. www.example.com/blog → 展示全部3篇文章 ✅
  2. www.example.com/blog/animals → 展示分类animals下的全部文章 ✅
  3. www.example.com/blog/animals/dogs → 展示子分类dogs的文章 ✅
  4. www.example.com/blog/animals/dogs/post-about-dogs → 文章详情页 ✅
  5. www.example.com/blog/pet-food/ → 标签pet-food的归档页 ✅

注意事项

  • 如果你之前使用过Yoast SEO的「移除分类前缀」功能,请先关闭该选项,避免代码冲突
  • 测试前请清空浏览器缓存,避免旧URL缓存导致测试错误
  • 如果出现404错误,再次点击「设置」→「固定链接」的「保存更改」按钮重置规则,或者检查.htaccess文件是否有写入权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:22:39