WordPress覚書 その1 「カスタム投稿の取得とか出力とか」

20160325

WordPressを使った制作案件だと、
そのほとんどでカスタム投稿を使うことになるんだけど、
毎回関数の仕様を忘れて検索するハメになっているので、まとめることにする。

値の判定・取得について

get_query_var() でいかようにもなる

$wp_query内の変数を引っ張ってくる関数。
およそのものはこれで取得できると思う。

$wp_query->query_vars はこんなかんじ。

<?php
 array(49) {
   ["error"]=>string(0) ""
   ["m"]=>int(0)
   ["p"]=>int(0)
   ["post_parent"]=>string(0) ""
   ["subpost"]=>string(0) ""
   ["subpost_id"]=>string(0) ""
   ["attachment"]=>string(0) ""
   ["attachment_id"]=>int(0)
   ["name"]=>string(0) ""
   ["hour"]=>string(0) ""
   ["static"]=>string(0) ""
   ["pagename"]=>string(0) ""
   ["page_id"]=>int(0)
   ["second"]=>string(0) ""
   ["minute"]=>string(0) ""
   ["day"]=>int(0)
   ["monthnum"]=>int(0)
   ["year"]=>int(0)
   ["w"]=>int(0)
   ["category_name"]=>string(0) ""
   ["tag"]=>string(0) ""
   ["cat"]=>string(0) ""
   ["tag_id"]=>int(0)
   ["author_name"]=>string(0) ""
   ["feed"]=>string(0) ""
   ["tb"]=>string(0) ""
   ["paged"]=>string(0) ""
   ["comments_popup"]=>string(0) ""
   ["meta_key"]=>string(0) ""
   ["meta_value"]=>string(0) ""
   ["preview"]=>string(0) ""
   ["category__in"]=>array(0) {}
   ["category__not_in"]=>array(0) {}
   ["category__and"]=>array(0) {}
   ["post__in"]=>array(0) {}
   ["post__not_in"]=>array(0) {}
   ["tag__in"]=>array(0) {}
   ["tag__not_in"]=>array(0) {}
   ["tag__and"]=>array(0) {}
   ["tag_slug__in"]=>array(0) {}
   ["tag_slug__and"]=>array(0) {}
   ["caller_get_posts"]=>bool(false)
   ["suppress_filters"]=>bool(false)
   ["post_type"]=>string(4) "post"
   ["posts_per_page"]=>int(15)
   ["nopaging"]=>bool(false)
   ["comments_per_page"]=>string(2) "50"
   ["order"]=>string(4) "DESC"
   ["orderby"]=>string(23) "wp_posts.post_date DESC"
 }
 ?>

参考:WordPressのカテゴリ判定について | WEBプログラム覚書
http://www.kantenna.com/pg/2009/11/wordpress_1.php

ループの出力について

Wp_Query()でいかようにも(r

カスタムループを生成する際に使用する。
終わりにwp_reset_postdata();して掃除するのを忘れずに。

記述例

<?php
  $term_var = get_query_var( 'term' );
  $taxonomy_name  = get_query_var( 'taxonomy' );
  $postQuery = new WP_Query();
  $param = array(
    'posts_per_page' => '件数',
    'post_type' => 'カスタム投稿タイプ',
    'taxonomy' => $taxonomy_var,
    'term' => $term_var,
    'paged' => $paged,
    'meta_query' => array(
      array(
        'key' => '任意のCustomFieldのキー',
        'value' => '任意のCustomFieldの値'
        // 'value' => array( '値1', '値2')   // <-複数指定する場合
      )
    )
  );
  $postQuery->query($param);
?>

<?php
  if( $postQuery->have_posts() ) :
  while( $postQuery->have_posts() ) :
  $postQuery->the_post(); 
?>

  // ループ内容記述

<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>

Advanced Custom Field(ACF)を利用しつつタクソノミー、タームを細かく指定している場合、
任意の条件でループを回すのがなかなかしんどい。
いちいちvar_dump()で値を出力しながら任意の値を特定するのも面倒くさい。
WP_Queryで指定できる値をまとめたのがあったのでリンクを。

参考:WP_Queryの使い方をPHPコードにまとめた便利なコード・スニペット
http://notnil-creative.com/blog/archives/1288

記述例で使ったmeta_queryの仕様はここを参考に

参考:query_posts(WP_Queryクラス)でカスタムフィールドを使う:WordPress私的マニュアル
http://elearn.jp/wpman/column/c20110915_01.html

おわりに

一刻も早くWordpressを投げ捨てたい。