web-dev-qa-db-ja.com

静的変数とadd_rewrite_rule?

マイナーなWebサイトを構築していて、特定のリンクを使用しているときにはいつでも欲しいと思っています。彼はフロントページにリダイレクトされます。

fx:www.homepage.com/example/ -----> www.homepage.com

これまで私はadd_rewrite_ruleを使ってカスタム変数を使って人々をリダイレクトしていました - そして私は次のように使うだけで簡単にリダイレクトすることができます。

add_rewrite_rule('^example/?','index.php','top');

しかし、私の「問題」は、静的変数が必要なので、次のようにして実行できると考えたことです。

 add_rewrite_rule('^example/?','index.php?key1=123','top');

残念ながら、これを機能させることができないようで、query_var( 'key1')だけを実行しようとすると - 何も得られません。 ここで何が悪いのですか?

Update 1コメントにあるように、クエリ変数をホワイトリストに登録しようとしています

add_action('init', 'test_rewrite_rule', 10, 0);
function test_rewrite_rule() 
{
    add_rewrite_rule('^example/?','index.php?p=1&my-api=test','top');
}

//add_action('init', 'test_rewrite_tag', 10, 0);
//function test_rewrite_tag() 
//{
    //add_rewrite_tag('%my-api%', '([^&]+)');
//}

add_filter( 'query_vars', 'wpd_query_vars' );
function wpd_query_vars( $query_vars )
{
    $query_vars[] = 'my-api';
    return $query_vars;
}

そして変数を取得する

  $wp_query->query_vars['my-api'] 

アップデート2

完全に明確にするために、リダイレクトされたことを確認できさえすれば、私はそれが私の書き換えルートでどの変数を受け渡しているのか気にしません:)

1
Mac

書き換えルールに任意のクエリ変数を追加することはできません。許可された変数のホワイトリストがあります。

クエリ変数を追加するには、query_vars filterを使用します。このフィルタはmy-apiを有効なクエリ変数として追加します。

function wpd_query_vars( $query_vars ){
    $query_vars[] = 'my-api';
    return $query_vars;
}
add_filter( 'query_vars', 'wpd_query_vars' );

しかし、それは単にあなたに問い合わせ変数を与えます、あなたはまだそれで何かをする必要があります。書き換えルールは、きれいなURLをクエリ変数にマッピングします。 index.phpにマッピングされていない書き換えルールが機能しないのはそのためです。

代わりに、新しいクエリ変数がいつ定義されるかを探すフックを書く必要があります。もし定義されていれば、そのページに何をさせたいのかをします。

ほとんどの人はtemplate_redirectフックを使ってカスタムテンプレートをロードします。

add_action( 'template_redirect', 'custom_page_template_redirect' );
function custom_page_template_redirect() {
    global $wp_query;
    $custom_page = $wp_query->query_vars['my-api'];
    if ( $custom_page == 'key' ) {
        // we've found our page, call render_page and exit
        echo "hooray! it works!";
        exit;
    }
}

Hoorayを出力したり、テンプレートをロードしたりする代わりに、wp_safe_redirect()を呼び出してユーザーを選択した宛先にリダイレクトします(オフサイトの場合はwp_redirect

1
Tom J Nowell