如何在WordPress用add_rewrite_rule实现查询链URL转美观URL并解决404问题
WordPress自定义URL重写404问题修复方案
现有规则的错误原因
- 正则开头多了斜杠:WordPress 的
add_rewrite_rule()方法匹配路径时默认不带根路径开头的斜杠,加了开头斜杠会导致规则无法命中 - 路径匹配与实际需求不符:你需要适配的路径前缀是
buying/properties-for-sale/,如果你的页面slug不是properties-for-sale-salisbury-2,规则内的路径和pagename参数就会匹配错误 - 正则逻辑不严谨:原有正则没有限定匹配结束位置,参数段匹配规则容错性差,容易出现匹配错乱
- 未注册自定义查询参数:WordPress默认不会识别
property这个自定义参数,就算规则命中也无法正常传递参数值 - 未刷新重写缓存:修改重写规则后如果不刷新固定链接配置,新规则不会生效
正确配置代码
// 注册自定义查询参数,让WordPress识别property参数 add_filter('query_vars', function ($custom_vars) { $custom_vars[] = 'property'; return $custom_vars; }); // 新增重写规则 add_action('init', function () { // 适配路径:test.com/buying/properties-for-sale/参数值 的场景 add_rewrite_rule( '^buying/properties-for-sale/([^/]+)/?$', 'index.php?pagename=buying/properties-for-sale&property=$matches[1]', 'top' ); // 如果你实际的页面slug是properties-for-sale-salisbury-2,父页面为buying,请注释上面的规则,启用下面这条 // add_rewrite_rule( // '^buying/properties-for-sale-salisbury-2/([^/]+)/?$', // 'index.php?pagename=buying/properties-for-sale-salisbury-2&property=$matches[1]', // 'top' // ); });
生效操作步骤
- 将上述代码添加到当前使用主题的
functions.php文件,或者自定义功能插件的代码文件中 - 进入WordPress后台,打开「设置」-「固定链接」页面,无需修改任何配置,直接点击「保存更改」,触发重写规则缓存刷新
- 测试访问目标美观URL,确认页面正常加载,可在页面模板中通过
get_query_var('property')获取到传递的参数值
内容的提问来源于stack exchange,提问作者Amal
相关产品推荐
相关产品推荐

