こないだ書いたこの記事へのアクセスが
思ったより多かったので需要あるのかなぁと思って書きます。ありがとうございます。
そのうち応用編もやってみたいなぁと思います。
プログラム中のデータ取得にはMysql等のDBへ検索をします。
グーグルでもキーワード入れて検索します。
そのキーワードを、DBではクエリって言ったりします。
少ない条件ならいいんですけど、
条件が複雑になってくると、僕はクエリを作るだけで結構な労力がかかります。
でもWordPressにはそんなクエリを考える労力を軽減してくれる素敵なクラス
WP_Queryって言うのがあります。今日はそんな大した事書きませんけど、
案外簡単なんだって思って貰いたいだけです。
今日は、そのWP_Queryをこういうケースで使うだろうって言うコードを載せていきます。
INDEX
WP_Queryクラス
これがデータベースへの問い合わせをやってくれる機械みたいなクラスです。
材料(パラメータ)を入れて、ちょっとも待たないうちにデータを返してくれます。
データの件数にもよりますが・・・。
結果にアクセスするには以下です。
$query $query_vars $query_object $post_count $posts $found_posts $max_num_pages $current_post $post
その他のis_singleとかboolで戻るもの。
よく使うのは、このpostsかpostかqueryくらいだと思います。
次からはいくつかのWP_Queryを使って色んなデータを取得していきます。
データへのアクセス方法
あ、その前に折角データの取得が出来たって
アクセスができなきゃ意味が無いので
とりあえず書いておきます。
$hoge = new WP_Query(こんなかにクエリ); //クラスを呼び出します。 $hoge->posts; //プロパティにアクセスします。
もちろんプロパティはposts以外にもさっき言ったやつがあるので
queryとかquery_varとかにもアクセスしてみてください。
クエリがあってればどっかにあります。
WP_Queryでカテゴリー取得
これはカテゴリーの名前で検索をかけています。
ほかにも、category_IDで検索が出来たり、
複数のカテゴリで検索が出来たりします。
$obj = new WP_Query( array( 'category_name' => 'js','php','web', ) );
パラメータの説明に関しては
CODEXかHissyさんのとこで見ていただくのが分かりやすいです。
Hissyさんのとこは、最近更に情報が増えてるのでオススメですし、
なにより末翻訳部分がありません。日本語です。
WP_Queryで子カテゴリの取得
これは以前、別の記事で多分コード書きましたけど
データ取得だけにするとこんな感じになると思います。
$obj = new WP_Query( array( 'tax_query' => array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => 'google', ) ) );
fieldをidにすれば、termsのとこにはタームIDを入れて検索できます。
tax_queryの中にarrayが入るので注意してくださいネ。
これいつも思うんですけど、子カテゴリってtaxonomy扱いなんでしょうか。
ANDとかORとか使うこともできるので、絞り込みたいとか、条件を広げたいとか
夢は広がりますが、それはまた今度にします。
WP_Queryでタグの取得
これもカテゴリと一緒のように、IDで検索もできますし、
AND、ORなどの条件をつけて検索することもできます。
taxonomyと違うのはfieldによって、タイプを切り替える必要がないってことです。
既にあるパラメータで対応が可能です。
なお、パラメータについては(ry
$obj = new WP_Query( array( 'tag' => 'centos', ) );
WP_Queryでタクソノミーを取得
未だにこのタクソノミーがあいまいなんですけど
カスタム投稿で設定したカテゴリーの様なものを取得することができます。
パラメータから自分が解釈したところによると、
タクソノミー名というのは、register_post_type()の第二引数のパラメータの中
taxonomiesをさします。で、そこから投稿画面に現れた自分で作ったカテゴリーなりタグなりっていうのは
こいつらに属するタームっていうことになると思います。多分!
で、多分予想なんですけど、投稿タイプpostのカテゴリーってのも実は
タクソノミーの中の一つなんですが、予め定義されてるんだと思います。
これ本当に予想なので、なんかいっとるわくらいに思って下さい。
それではコードを見ていきましょう
$obj = new WP_Query( array( 'post_type' => "websites", 'tax_query' => array( 'taxonomy' => 'sitecat', 'field' => 'slug', 'terms' => 'mondai', ) ) );
こうなります。
注意したいのはpost_typeはタクソノミー製作時に自分が考えた
register_taxonomy()の第二引数に入れたタクソノミー名を使うことです。
これが投稿タイプ名です。
taxonomyはタクソノミー名なのでregister_post_type()の第二引数のパラメータの中
taxonomiesで定義したタクソノミー名の中から使いたい奴を選択します。
これでタクソノミーの扱いも自由自在です。
理解できれば、WordPressでやりたいことは大概できます。