2016/04/27
【wordpress】WP_Queryを指定する配列にquery_stringを加える方法
wordpressにて、記事のリストを表示する際、
通常は、
1 2 3 | <?php if (have_posts()) : while (have_posts()) : the_post(); ?> //一覧の内容 <?php endwhile; endif; ?> |
ですが、
いろいろ条件を指定したい場合、
WP_Queryを使用します。
例えば以下のような感じです。
1 2 3 4 5 6 7 8 9 | <?php $args = array( 'order' => 'ASC', 'posts_per_page' => 5, ); $wp_query = new WP_Query($args); if ($wp_query->have_posts()) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <?php endwhile; endif; ?> |
ちなみにこれは、記事が古い(時間)順番に5件表示されます。
他のアーカイブページでもこれで大丈夫なんですが、
カスタムポストタイプのアーカイブページで使いたい場合、
post_typeを指定する必要があります。
一番最初の場合はpost_typeの指定は必要ありません。
これはそもそもそのページを開いてる時にwp_queryにデフォルトとしてそのページに投稿されている情報が格納されています。
WP_Queryを指定すると、条件が上書きされ、post_typeも「post」になってしまいます。
なので、例えばカスタムポストタイプが「news」の場合、
1 2 3 4 5 6 7 8 9 10 | <?php $args = array( 'post_type' => 'news', 'order' => 'ASC', 'posts_per_page' => 5, ); $wp_query = new WP_Query($args); if ($wp_query->have_posts()) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <?php endwhile; endif; ?> |
とすれば、カスタムポストタイプが「news」の記事が表示されるようになります。
ただ、カスタムポストタイプのアーカイブページを開いているのに、
わざわざpost_typeを指定するのはなんか嫌なので、
デフォルトの情報を引き継げないものかと思い、以下のようにしました。
1 2 3 4 5 6 7 8 9 10 11 | parse_str( $query_string, $args ); $args = array_merge($args,array( 'order' => 'ASC', 'posts_per_page' => 5, ) ); $wp_query = new WP_Query($args); if ($wp_query->have_posts()) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <?php endwhile; endif; ?> |
こちらでも先程紹介した方法と同じものが表示されます。
これでいちいちカスタムポストタイプの値を変更する必要がなくなります。
最後に、WP_Queryの指定方法をまとめてくれている記事を紹介します。
Author Profile
スターフィールド編集部
SHARE