可见的网址:
/products/building-automation/details/productSKU
应该指向真正的WordPress页面:
/products/details/?SKU=productSKU
public function setup_frontend() {
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'products/details/?SKU=$matches[2]',
'top'
);
// Other code logic...
}
据我所知,$matches
指向()
中正则表达式的部分,因此在示例中,$matches[1]
将为building-automation
,并且$matches[2]
将是productSKU
。
我曾多次尝试过冲洗规则。这是从类内部调用的,但这似乎不是问题。我将该函数附加到init
事件。
我正在获取404
模板。我做错了什么?
原来,参数HAS的第二部分为index.php
。因为我试图指向products/...
,所以它破了。所以我更新到了这个:
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'?pagename=products/details&SKU=$matches[2]',
'top'
);
它不起作用并指向正确的页面和模板。但是,$matches
部分仍未通过。事实上,$_GET['SKU']
正在'$matches[2]'
。
答案 0 :(得分:2)
第一个问题是,它指的是不以index.php
开头的东西。不幸的是,它必须指向index.php?stuff
。但您仍然可以使用页面名称,如下所示。
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'index.php?pagename=products/details&SKU=$matches[2]',
'top'
);
其次,您需要注册查询字符串,即SKU
。加上这个:
add_filter( 'query_vars', 'product_details_rewrite_filter' );
function product_details_rewrite_filter( $query_vars ){
$query_vars[] = 'SKU';
return $query_vars;
}
你仍然会遇到问题。 $_GET['SKU']
将是$matches[2]
,而不是RIBU1C
。要解决此问题,请将$matches[2]
更改为$2
。然后它会工作:
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'index.php?pagename=products/details&SKU=$2',
'top'
);
答案 1 :(得分:1)
它没有以这种方式工作......你试图用这段代码实现不可能。使用index.php路由重写wordpress中的规则,但不使用外部路径。所以
products/(building-automation|lighting-controls)/details/([^/]*)
应该是"可翻译的" to" wordpress"语言(类似的东西)
index.php?post_type=products&category=$matches[1]&scu=$matches[1]
注意,scu
也应定义为额外的var。
编辑1:
事情(我认为)你试图获得实际上看起来像一个htaccess规则模式,在这种情况下,您可以使用mod_rewrite_rules
过滤器(它过滤到.htaccess的内容)来根据需要更改它。
编辑2: 广告 - 您还可以使用名为debug bar rewrite rules的调试栏插件来基本调试此数据。注意:(目前它不通过add_rewrite_rule支持规则列表,因此您只能直观地检查规则,看看它是否符合您的期望。)
答案 2 :(得分:0)
1)尝试更新永久链接。
转到信息中心 - >设置 - >永久链接 - >按钮"保存更改"
2)为你的功能添加动作
add_action('init', 'setup_frontend');
function setup_frontend() {
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'products/details/?SKU=$matches[2]',
'top'
);
// Other code logic...
}