• 解決済 hitaka

    (@hitaka)


    下記の通り、add_query_arg関数でパラメータ付URLを作成しました。

    $uri = 'http://localhost/hoge/'; //hogeはカテゴリースラッグ
    
    $query1 = array('monthnum' => '6');
    $uri_01 = esc_html(add_query_arg($query1,$uri)) // (1)
    
    $query2 = array('tag_id' => '8');
    $uri_02 = esc_html(add_query_arg($query2,$uri)) // (2)
    
    $query3 = array('meta_value' => 'test');
    $uri_03 = esc_html(add_query_arg($query3,$uri)) // (3)

    上記の処理の結果、下記のリンクが生成されます。

    (1) http://localhost/hoge/?monthnum=6
    (2) http://localhost/hoge/?tag_id=8
    (3) http://localhost/hoge/?meta_value=test

    さて、上記(1)(2)(3)のリンクをクリックして各ページを表示しましたが、
    $query_stringをechoしてみたところ、下記の通りになりました。

    // 表示結果
    (1) monthnum=6&category_name=test
    (2) category_name=test
    (3) category_name=test

    上記(2)(3)の通り、パラメータが渡っていない原因に
    お気付きの方がいましたら、ご教示いただきたいと思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    hitakaさん

    WordPressでは、パラメーターとして認識するものとしないものがあります。
    wp-includes/class-wp.phpのWPクラス冒頭で $public_query_vars で指定されているものが、URLやフォームのPOSTデータからクエリー条件として認識するパラメーターとなっています。
    (一般公開するカスタム投稿タイプやカスタム分類を追加したとき、認識するパラメーターも増えます)

    一方、$private_query_vars は、URLなどの外的なパラメーターからは受付ないが、query_postsなど内部で指定して有効と認識されるパラメーターです。

    (2),(3)のtag_id、meta_valueは、$private_query_vars には含まれているものの、$public_query_vars には含まれていないため、クエリー条件として認識されず、結果として、$query_stringにも存在していないのですね。

    $public_query_vars を増やしたい場合、query_vars フックでフィルタリングできるようになっています。

    トピック投稿者 hitaka

    (@hitaka)

    jim912さん

    ご回答ありがとうございます。

    $public_query_varsに対象のキーを追加し、
    やりたいことが実現できました。

    大変勉強になりました。
    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「URLに付けたパラメータが遷移先のページに渡らない」には新たに返信することはできません。