[WordPress Core] rewrite_rules_array を利用してリライトルールを追加する方法

add_rewrite_rule ではなく rewrite_rules_array を利用する方法を知ったので memo.

先のルールが優先するので、既存ルール $rules の前に新しいルールをセットします。
下記では /foo/[slug] の URL にアクセスすると /[slug] の内容が表示されるようなります。

functions.php
function myUrlRewrite( $rules ) {
    $newRules = array();
    $newRules['^foo/([^/]+)/?$'] = 'index.php?pagename=$matches[1]';
    return $newRules + $rules;
}
add_filter( 'rewrite_rules_array', 'myUrlRewrite' );

有効化するためには「ダッシュボード>設定>パーマリンク設定」で一度保存します。

ビューテンプレートで $wp_rewrite をダンプしたりすると、ルールが追加されていることを確認できます。

<?php
echo '<pre>';
var_dump( $wp_rewrite );
echo '</pre>';
?>

補遺

add_rewrite_rule