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

WordPress如何实现404场景按URL含/product规则自定义跳转

WordPress 404场景自定义跳转实现方案

这个需求可以正常实现,你提供的参考代码存在逻辑倒置、WordPress规范不兼容、匹配规则漏洞等问题,修正后即可生效。

原代码存在的问题

  • 逻辑判断写反:原代码识别到URL包含/product/时将$redirect设为true,但后续逻辑是$redirect == false才触发跳转,实际会把产品路径的请求拦截跳转,和需求完全相反
  • 未声明全局变量:直接调用$wp对象没有提前全局声明,会导致无法正确获取当前请求路径
  • 跳转方式不规范:使用原生header()函数跳转容易触发「headers already sent」报错,也无法兼容HTTPS、站点安装在子目录等场景
  • 路径匹配有漏洞:仅匹配带尾斜杠的/product/,会漏过/product、/product?id=xxx这类合法产品路径
  • 404地址写法错误:home_url(404)传入数字参数会被WordPress识别为页面ID,ID为404的页面不一定是你设置的自定义404落地页

修正后可直接使用的代码

将以下代码添加到当前主题的functions.php文件,或者通过代码片段插件插入即可生效:

add_action('template_redirect', function() {
    // 仅在触发404状态时执行逻辑
    if (!is_404()) {
        return;
    }
    
    global $wp;
    $current_path = $wp->request;
    // 匹配product路径前缀,兼容带/不带尾斜杠、带查询参数的场景
    // PHP版本 >= 8.0 用下面这行
    if (str_starts_with($current_path, 'product')) {
        // 命中产品路径,正常放行不跳转
        return;
    }
    // 如果你的PHP版本低于8.0,把上面的str_starts_with判断替换成下面这段
    // if (strpos($current_path, 'product') === 0) {
    //     return;
    // }

    // 非产品路径的404请求,301永久跳转到站点自定义404页
    wp_redirect(home_url('/404'), 301);
    exit;
});

注意:如果你的站点自定义产品路径不是product前缀,只需要把判断逻辑里的product替换成你实际用的路径关键词即可。如果是WooCommerce默认产品页,自带/product/前缀,代码可以直接兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:48:15