アップデート
書き換え API のコーデックス ドキュメントを調べたところ、 functions.php に次の内容が含まれています。
function my_rewrite_rules() {
add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=$matches[1]-overview&myVar=var', 'top');
}
add_action('init', 'my_rewrite_rules');
はい、パーマリンク ページに移動して、調整後にルールをフラッシュします。ページが存在し、アドレスバーに直接入力してアクセスできる場合でも、動作は同じです。404 より上のルールです。ただし、正規表現の一致の 1 つを次のようにハードコードすると、次のようになります。
function my_rewrite_rules() {
add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=a-overview&myVar=var', 'top');
}
add_action('init', 'my_rewrite_rules');
その後、すべてが期待どおりに機能し、クエリ変数が正しく設定されます。アイデア?
元の質問
私はかなり前からWordpressの書き換えルールを機能させようとしてきましたが、次のコード(functions.php内)が機能しない理由について完全に困惑しています:
function my_rewrite_rules($rules) {
$my_rules = array('(a|b|c|d)/?$' => 'index.php?pagename=$matches[1]-overview&my_var=somevar');
return array_merge($my_rules, $rules);
}
add_filter('page_rewrite_rules', 'my_rewrite_rules');
正規のリダイレクトを無効にし、書き換えは 404 のみです。リダイレクトが有効になっている場合、正しいページに移動しますが、クエリ変数が削除されます。「$matches[1]」を削除して a、b、c、または d に置き換えると、標準リダイレクトが無効になっていて、すべてが期待どおりに機能します。いくつかの回避策があることはわかっていますが、次の方法が機能しない理由を理解したいだけですか? ありがとう!