WordPressで「URLクエリ文字列(?key=xxx)」の定義と値の受け渡し検証
WordPressでは初期状態で様々な「URLクエリ文字列(?key=xxx)」が有効になっています。
この「URLクエリ文字列」に対して独自のキーを追加して、
ショートコードなどで利用ができればURLを介して値や状態の受け渡しができるようになります。
ここでは実際に独自の「URLクエリ文字列」を追加して動かす流れについてご紹介します。
概要
WordPressで「URLクエリ文字列(?key=xxx)」の値受渡とURL置換検証
検索で使う「?s=xxx」や投稿や固定ページを示す「?p=xxx」などはよく目にするものです。
WordPressに初期状態で定義されているURLクエリ文字列
普段目にしているものもあれば気にしたことがないものまであります。
一般的な「URLクエリ文字列」のパターンとして投稿などに絡むものは以下の様なものがあります。
記事なら「?p=xx」、カテゴリなら「?cat=xx」、タグなら「?tag=xx」
年月別なら「?m=xx」、検索結果なら「?s=xx」と、いった感じです。
またこうしたWordPressで使用されるクエリ文字列は、
Codexを参照して知る事ができます。
クエリ変数(Public)
- attachment
- attachment_id
- author
- author_name
- cat
- category_name
- comments_popup
- day
- error
- feed
- hour
- m
- minute
- monthnum
- name
- p
- page_id
- paged
- pagename
- post_parent
- post_type
- preview
- second
- static
- subpost
- subpost_id
- tag
- tag_id
- tb
- w
- year
以下の一覧をご覧ください。
$public_query_vars = array(‘m‘, ‘p‘, ‘posts’, ‘w’, ‘cat‘, ‘withcomments’, ‘withoutcomments’, ‘s‘, ‘search’, ‘exact’, ‘sentence’, ‘debug’, ‘calendar’, ‘page’, ‘paged’, ‘more’, ‘tb’, ‘pb’, ‘author’, ‘order’, ‘orderby’, ‘year’, ‘monthnum’, ‘day’, ‘hour’, ‘minute’, ‘second’, ‘name’, ‘category_name’, ‘tag‘, ‘feed’, ‘author_name’, ‘static’, ‘pagename’, ‘page_id’, ‘error’, ‘comments_popup’, ‘attachment’, ‘attachment_id’, ‘subpost’, ‘subpost_id’, ‘preview’, ‘robots’, ‘taxonomy’, ‘term’, ‘cpage’, ‘post_type’);
(抜粋引用)WordPress Query Vars – WordPress Codex 日本語版
(Evernote)https://www.evernote.com/shard/s380/u/0/sh/019219b6-e1ae-49b3-8dce-7c8c131f0341/83d0e8bba0d24c0a356acd1b8add4513
URLクエリ文字列を独自に定義する
上記を見ての通り「URLクエリ文字列」は「$public_query_vars」という変数に、
配列で格納されていることが分かります。
この配列に対して、独自でキーにしたい文字列を追加する事で、
好きな「URLクエリ文字列」を追加する事ができます。
追加の手順については、以下のように書かれています。
カスタムクエリ変数
URL に付け加えるカスタムクエリ変数(例: add_query_arg() を使った “http://example.com/some_page/?my_var=foo” など)を使用するには、それらを WP_Query が扱えるパブリック・クエリ変数に追加する必要があります。パブリック・クエリ変数は WP_Query のインスタンスが作成される際に作られますが、幸運なことに実際に WP_Query の $query_vars プロパティにデータを投入する前には ‘query_vars’ フィルタが通されます。
つまり、新しい独自クエリ変数を WP_Query に含めるには ‘query_vars’ フィルタにフックしてクエリ変数を $vars 配列に追加すればよいのです。フィルタ関数でその配列を返すようにしましょう。以下をご覧ください。
123456 function add_query_vars_filter( $vars ){$vars[] = "my_var";return $vars;}add_filter( 'query_vars', 'add_query_vars_filter' );
- WP_Query::get() を参照。
- グローバル (object) $wp_query を使用。
(引用) カスタムクエリ変数|関数リファレンス/get query var – WordPress Codex 日本語版
(Evernote) https://www.evernote.com/shard/s380/u/0/sh/f3a1cd4d-bccf-4fbd-a036-7ce0db060b85/05ae790c789e6bb8116898cf34270774
初期状態のパブリッククエリ変数を確認してみる
ちなみにどのようなパブリック変数が定義されているのかは、
「$GLOBALS」というサーバー変数を見れば確認ができます。
抜粋ですが、以下のように確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
[wp] => WP Object ( [public_query_vars] => Array ( [0] => m [1] => p [2] => posts [3] => w [4] => cat [5] => withcomments [6] => withoutcomments [7] => s [8] => search [9] => exact [10] => sentence [11] => calendar [12] => page [13] => paged [14] => more [15] => tb [16] => pb [17] => author [18] => order [19] => orderby [20] => year [21] => monthnum [22] => day [23] => hour [24] => minute [25] => second [26] => name [27] => category_name [28] => tag [29] => feed [30] => author_name [31] => static [32] => pagename [33] => page_id [34] => error [35] => attachment [36] => attachment_id [37] => subpost [38] => subpost_id [39] => preview [40] => robots [41] => taxonomy [42] => term [43] => cpage [44] => post_type [45] => embed [46] => post_format [47] => rest_route ) [private_query_vars] => Array ( [0] => offset [1] => posts_per_page [2] => posts_per_archive_page [3] => showposts [4] => nopaging [5] => post_type [6] => post_status [7] => category__in [8] => category__not_in [9] => category__and [10] => tag__in [11] => tag__not_in [12] => tag__and [13] => tag_slug__in [14] => tag_slug__and [15] => tag_id [16] => post_mime_type [17] => perm [18] => comments_per_page [19] => post__in [20] => post__not_in [21] => post_parent [22] => post_parent__in [23] => post_parent__not_in [24] => title [25] => fields ) [extra_query_vars] => Array ( ) [query_vars] => Array ( [page] => [pagename] => cc_server_globals ) [query_string] => pagename=cc_server_globals [request] => cc_server_globals [matched_rule] => (.?.+?)(?:/([0-9]+))?/?$ [matched_query] => pagename=cc_server_globals&page= [did_permalink] => 1 ) |
カスタムクエリ変数(URLクエリ文字列)を追加する
では、次に実際ヘルプ記載の通り、カスタムクエリ変数を追加します。
functions.phpに対して、以下のような記述を追加します。(ヘルプそのまま)
1 2 3 4 5 |
function add_query_vars_filter( $vars ){ $vars[] = "my_var"; return $vars; } add_filter( 'query_vars', 'add_query_vars_filter' ); |
先ほど同様に値を確認します。
「$GLOBALS」というサーバー変数の「public_query_vars」の中に、
「my_var」が追加されています。(要素48、53行目)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
[wp] => WP Object ( [public_query_vars] => Array ( [0] => m [1] => p [2] => posts [3] => w [4] => cat [5] => withcomments [6] => withoutcomments [7] => s [8] => search [9] => exact [10] => sentence [11] => calendar [12] => page [13] => paged [14] => more [15] => tb [16] => pb [17] => author [18] => order [19] => orderby [20] => year [21] => monthnum [22] => day [23] => hour [24] => minute [25] => second [26] => name [27] => category_name [28] => tag [29] => feed [30] => author_name [31] => static [32] => pagename [33] => page_id [34] => error [35] => attachment [36] => attachment_id [37] => subpost [38] => subpost_id [39] => preview [40] => robots [41] => taxonomy [42] => term [43] => cpage [44] => post_type [45] => embed [46] => post_format [47] => rest_route [48] => my_var ) [private_query_vars] => Array ( [0] => offset [1] => posts_per_page [2] => posts_per_archive_page [3] => showposts [4] => nopaging [5] => post_type [6] => post_status [7] => category__in [8] => category__not_in [9] => category__and [10] => tag__in [11] => tag__not_in [12] => tag__and [13] => tag_slug__in [14] => tag_slug__and [15] => tag_id [16] => post_mime_type [17] => perm [18] => comments_per_page [19] => post__in [20] => post__not_in [21] => post_parent [22] => post_parent__in [23] => post_parent__not_in [24] => title [25] => fields ) [extra_query_vars] => Array ( ) [query_vars] => Array ( [page] => [pagename] => cc_server_globals ) [query_string] => pagename=cc_server_globals [request] => cc_server_globals [matched_rule] => (.?.+?)(?:/([0-9]+))?/?$ [matched_query] => pagename=cc_server_globals&page= [did_permalink] => 1 ) |
実際に「public_query_vars」の値を以下で表示しています。
これでグローバルカスタムクエリ変数は追加されました。
では、実際の値の受け渡しについては以下でご紹介します。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: