ゴール
の目に見えるURL:WordPress:なぜadd_rewrite_ruleは動作しませんか?
/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
テンプレートを取得しています。私は間違って何をしていますか?
編集
結局のところ、パラメータの第二の部分は、index.php
なければなりません。私がproducts/...
を指し示そうとしていたので、それは壊れました。だから私はこれに更新しました:
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'?pagename=products/details&SKU=$matches[2]',
'top'
);
これはうまくいかず、正しいページとテンプレートを指しています。しかし、$matches
の部分はまだ通っていません。実際には、$_GET['SKU']
は'$matches[2]'
として届いています。
答えの一部を試してみると、それは部分的に機能しています。 2番目のパラメータHASのように 'index.php'と思われます。しかし、あなたの答えの 'term'部分は正しいとは思えません。私は部分的に動作する新しい文字列で私の質問を編集しました。 –
はい、申し訳ありませんが、サンプルコードのテキストの間違った部分を置き換えました。 また、$ _GET ['SKU']を使用できるようにこのコードを用意する必要があります。 add_filter( 'query_vars'、 'product_details_rewrite_filter'); function product_details_rewrite_filter($ query_vars){ $ query_vars [] = 'SKU'; return $ query_vars; } ' –