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

WordPress带自定义参数的重写规则不生效如何解决?

问题修复方案

核心问题原因

  1. 不应该在init钩子中每次请求都调用flush_rewrite_rules(),频繁刷新会导致重写规则缓存异常,该函数仅需在规则变更时执行一次即可。
  2. 短代码回调函数直接使用echo输出内容,不符合WordPress短代码开发规范,短代码必须返回输出内容,否则会出现输出位置错乱、参数读取异常的问题。
  3. 未注册对应重写标签,部分WordPress版本会忽略未注册的自定义查询参数,add_rewrite_tag方法适用于所有自定义参数场景,并非仅限文章筛选。
  4. 需确认重写规则中填写的page_id=18对应的页面,确实已经添加了[shortcode]短代码。

修复后完整代码

// 注册自定义重写标签与规则
function prepare_rewrite() {
    // 注册product_id重写标签,让WordPress识别该参数
    add_rewrite_tag('%product_id%', '([^/]+)');
    add_rewrite_rule('^product_id/([^/]*)/?$','index.php?page_id=18&product_id=$matches[1]','top');
}
add_action('init','prepare_rewrite');

// 将product_id加入允许的查询变量白名单
function rewrite_add_var($q_vars) {
    $q_vars[] = 'product_id';
    return $q_vars;
}
add_filter('query_vars','rewrite_add_var');

// 短代码回调(注意必须return输出内容,不能直接echo)
function shortcode_callback() {
    $product_id = get_query_var('product_id', 'not found<br>');
    return esc_html($product_id);
}
add_shortcode('shortcode', 'shortcode_callback');

// 插件启用时一次性刷新重写规则(如果代码放在主题functions.php中,可删除以下两个钩子,手动刷新规则即可)
function custom_plugin_activate() {
    prepare_rewrite();
    flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'custom_plugin_activate');

function custom_plugin_deactivate() {
    flush_rewrite_rules();
}
register_deactivation_hook(__FILE__, 'custom_plugin_deactivate');

操作步骤

  1. 替换原有代码为上述修复版本
  2. 进入WordPress后台→设置→固定链接,无需修改任何配置,直接点击「保存更改」,手动刷新一次重写规则清除缓存
  3. 访问example.com/product_id/1234即可正常读取到product_id参数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:48:04