web-dev-qa-db-ja.com

クエリ変数によるカスタム書き換え

私は何時間もこれにこだわっていて、これらすべての異なる方法を試しましたが、どれもうまくいかないようです。私は同じような問題を抱えている他のスレッドを見ましたが、解決策は私のために働いていません。誰かが手助けできることを願っています。

パーマリンクを使ったカスタムテンプレートのページがあります

example.com/central

このページはクエリ変数を受け付けます。

example.com/central/?information=people

私は人々が入力したときに動作するようにカスタム書き換えルールを取得しようとしています

example.com/central/information/people

それは何を表示します

example.com/central/?information=people

します。

現在私のテンプレートfunctions.phpにあります

function add_query_vars_filter( $vars ){
  $vars[] = "information";
  return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

function custom_rewrite_tag() {
  add_rewrite_tag('%information%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

function custom_rewrite()
{
        add_rewrite_rule('^(.+)/information/(.+)/?$','index.php?p=64476&information=$matches[2]','top');
}
add_action('init', 'custom_rewrite');

私が訪れたとき

example.com/central/information/people 

私はとられるだけです

example.com/central/

私の2番目の問題は、p = 64476がハードコーディングされているということです、どうやって$ matchesからIDを取得するのですか[1]。

1
Ch3n

これを試してください、私は簡単なテストをしました、そして、それは私のために働きました。 centralというページを作成しました。

このコードを挿入した後に書き換えルールをフラッシュすることを忘れないでください。

add_filter( 'query_vars', 'query_vars' );
function query_vars( $vars )
{
    array_Push($vars, 'information');
    return $vars;
}

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules )
{
    $newrules = array();
    $newrules[ 'central/information/people/?$' ] = 'index.php?pagename=central&information=people';

    return $newrules + $rules;
}
1
David Labbe

書き換えエンドポイントを追加します 書き換えルールとクエリ変数の代わりに/。このAPI関数はあなたに代わってこれら両方を行います。

function wpd_add_my_endpoint(){
    add_rewrite_endpoint( 'information', EP_PAGES );
}
add_action( 'init', 'wpd_add_my_endpoint' );

どのページでも最後にinformationを追加することができ、その値はget_query_var('information')を介して利用可能になります。

1
Milo