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

WordPress Block插件add_rewrite_rule重写规则失效排查

问题解决步骤

1. 修复重写规则的正则匹配漏洞

你当前的重写规则正则[a-z0-9-]+未包含下划线_,但你的slug格式(比如02-12-2024_artist_name)带有下划线,导致规则无法匹配目标URL,直接返回404。修改正则为包含下划线的模式:

add_action('init',  function () {
    // 新增下划线匹配,调整正则为[a-z0-9-_]+
    add_rewrite_rule('event/([a-z0-9-_]+)[/]?$', 'index.php?slug=$matches[1]', 'top');
    add_rewrite_tag('%slug%', '([^&]+)');
    error_log("Rewrite rules added");
});

add_filter('query_vars', function ($query_vars) {
    $query_vars[] = 'slug';
    return $query_vars;
});

2. 刷新WordPress固定链接缓存

添加或修改重写规则后,必须刷新固定链接才能让规则生效:

  • 登录WordPress后台,进入「设置」→「固定链接」
  • 无需修改任何设置,直接点击「保存更改」,这会触发WordPress更新重写规则缓存。

3. 修正template_include钩子逻辑

你当前的钩子逻辑完全倒置:应该在slug存在且有效时返回自定义模板render.php,而非默认模板。另外,原代码在slug存在时无返回值,会导致WordPress无法正确加载模板。修改后的代码:

add_filter('template_include', function ($template) {
    $slug = get_query_var('slug', false);
    // 当slug存在且不为空时,加载自定义模板
    if ($slug && !empty($slug)) {
        $custom_template = plugin_dir_path(__FILE__) . 'src/render.php';
        // 先检查模板文件是否存在,避免报错
        if (file_exists($custom_template)) {
            return $custom_template;
        }
    }
    // 否则返回默认模板
    return $template;
});

4. 在render.php中获取slug

在render.php里,直接通过get_query_var('slug')获取当前slug值,用于渲染活动详情:

$event_slug = get_query_var('slug');
// 此处根据slug查询活动数据并渲染内容

额外检查项

  • 确保服务器支持URL重写:Apache需开启mod_rewrite模块;Nginx需在配置文件中添加以下规则:
location / {
    try_files $uri $uri/ /index.php?$args;
}
  • 开启WP_DEBUG查看wp-content/debug.log,排查是否存在插件或主题冲突导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:04:56