web-dev-qa-db-ja.com

カスタムrewrite_rules - 数字だけを渡し、アルファベット文字は渡さない

カスタムページテンプレートにvarを渡すための書き換え規則を追加しようとしています。

奇妙な理由でそれは変数の中の数字だけを除いて、私が数字以外の文字をタイプするときそれは404に向かいます。

例えば

これは動作します:http://example.com/reco/9080

http://example.com/reco/abcd404にリダイレクト)

これは私のコードです:

function add_rewrite_rules($wp_rewrite) {
        add_rewrite_rule('reco/([^/]*)/?', 'index.php/reco/?b=$1', 'top');
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');


function query_vars($public_query_vars) {
    $public_query_vars[] = "b";
    return $public_query_vars;
}
add_filter('query_vars', 'query_vars');
1
Sir Code-A-lot

index.php/reco/?b=$1の代わりに、これを試してください:

"$wp_rewrite->index?pagename=reco&b=" . $wp_rewrite->preg_index( 1 )

また、ルールが先頭だけではなくパス全体にのみ一致するように、reco/([^/]*)/?正規表現に$を追加する必要があります。

その後、後でルールをフラッシュします(パーマリンク設定をadminに再保存するだけです)。

更新:代わりにpage_rewrite_rulesフィルターを使ってみて、get_query_var( 'b' )を使ってください。

function wpse_139259_page_rules( $rules ) {
    return array(
        'reco/([^/]+)/?$' => 'index.php?pagename=reco&b=$matches[1]',
    ) + $rules;
}

add_filter( 'page_rewrite_rules', 'wpse_139259_page_rules' );
1
TheDeadMedic