【カスタム投稿タイプもできる】WordPressで特定の条件に合った投稿タイプをリスト形式などで取得できる「get_post_types」

投稿タイプについて確認しよう

本題に入る前に・・・そもそも「投稿タイプ」ってのはWordPressをインストールした直後の状態だと、デフォルトで以下のものがすでに登録されています。

登録されている投稿タイプ

  • post – 投稿
  • page – 固定ページ
  • attachment – 添付ファイル
  • revision – リビジョン
  • nav_menu_item – ナビゲーションメニュー(バージョン 3.0 以降)

「登録されている」っていう表現が難しいと思う方もいるかも。要は「使えますよ」ってことで覚えておけばOKだと思います。

で、このデフォルトで用意されている投稿タイプ以外に自分でお好みの投稿タイプを登録することもできるってことですね。それが「カスタム投稿タイプ」のことです。カスタム投稿タイプを登録するには「register_post_type」を使うとできます。

ここから本題

というわけで、投稿タイプについてなんとなく理解したところで・・・投稿タイプをリスト形式で取得する機会があって、その場合は「get_post_types」を使うと便利でした。もし似たようなことをされたい場合は、是非ともご参考ください。

投稿タイプの一覧を取得する

get_post_types」の使い方はCodexにも載っていますので参考にしますと・・・

<?php
get_post_types( $args, $output, $operator );
?>

使えるパラメーター

  • $args(オプション) ・・・ 使える引数はけっこうあるのでCodexを参照ください
  • $output(オプション) ・・・ 戻り値の型(names または object)
  • $operator(オプション) ・・・ 演算子を指定する(and または or)

使えるパラメーターはどれもオプションなので指定しなくても投稿タイプを取得できますが、条件に合った投稿タイプを取得したい事がほとんどだと思いますので、やりたいことに合わせて設定しましょう。

というわけで、次は具体的にどういう使い方をしているのか見ましょう。

「get_post_types」の使い方

Codexのサンプルコードがわかりやすいので参考にさせてていただいて・・・加えて、処理ごとにコメント入れました。以下のコードは公開済みのカスタム投稿タイプのみ取得・表示しています。

<?php
$args = array(
   'public'   => true, //公開している投稿タイプは表示
   '_builtin' => false //デフォルトの投稿タイプは非表示
);

$output = 'names'; // 「names」で投稿タイプ名を指定
$operator = 'and'; // 「and」で$argsの条件にどちらも合致するものだけ指定

$post_types = get_post_types( $args, $output, $operator ); //条件に合った投稿タイプ名を配列で取得

foreach ( $post_types  as $post_type ) { //取得した配列をループさせる
   echo '<p>' . $post_type . '</p>'; //投稿タイプ名を表示
}
?>

オブジェクトで取得するといろいろできる

ちなみに私はどんな使い方をしたかというと・・・WordPressプラグイン「Newpost Catch」で投稿タイプ別に記事を表示させたいという要望があったので、機能追加の作業をしています。その部分に「get_post_types」を使いました。

こんな感じ。投稿タイプ別に新着記事を表示できるようになる予定

get_post_types」の第2引数「$output = ‘object’」を指定すると、投稿タイプ名以外のデータも取得できるので、応用すればいろいろできますね。

今テスト環境で動作確認中なので、もうちょっとしたらプラグインもアップグレードできると思います。

まとめ

「特定の条件に合う投稿タイプをすべて取得して何かをしたい」という場面は使えると思います。今回は少しだけ私の使用例を書きましたが、投稿タイプの選択肢を実装するために、利用する機会もあるとは思います。

というわけで、何かのご参考となりましたら幸いです。

著者:bouya Imamura