WordPressで利用されている「カスタム投稿タイプ名」をすべて取得する関数

WordPressを利用していて、特殊な投稿をしたい場合は「カスタム投稿」を利用している人も多いかと思います。

設定方法はこちら。

1.functions.phpに処理を追加以下の処理をfunctions.phpに追加する。この時、投稿タイプの定義も同時に行う(以下の例は投稿タイプをnewsとしています)add_actio…

上記のような設定をしている場合、『WordPressユーザーが独自追加した「カスタム投稿タイプ」を全て手軽に取得できないか?』と思ったもので、調べて関数化してみました。

スポンサーリンク
レクタングル(大)広告

カスタム投稿タイプ名の配列を取得する関数

作成した関数はこちら。

//カスタム投稿タイプの配列取得
if ( !function_exists( 'get_custum_post_types' ) ):
function get_custum_post_types(){
  $args = array(
    'public' => true,
    '_builtin' => false
  );
  $post_types = get_post_types( $args );
  return $post_types;
}
endif;

思ったより簡単に実装できました。

まずは、get_post_types用の「カスタム投稿タイプのみを取得する引数($args)」を設定した後、get_post_types($args)関数を実行しているだけです。

例えば、「news」、「event」といったようなカスタム投稿タイプを追加している場合は、関数を実行すると、戻り値として以下のような配列を取得できます。

array( 'news', 'event' )

参考にしたページはこちら。

参考 WordPressで投稿タイプの一覧やカスタム投稿タイプの一覧を取得する – WebCake

利用例

僕はこれまで、投稿管理画面のメタボックスの追加などには、以下のように一つ一つ指定していました。

// カスタムボックスの追加コードサンプル(これだけでは動作しません)
add_action('admin_menu', 'add_memo_custom_box');
if ( !function_exists( 'add_memo_custom_box' ) ):
function add_memo_custom_box(){
  //メモ用ボックス
  add_meta_box( 'singular_memo_settings', 'メモ', 'view_memo_custom_box', 'カスタム投稿タイプ名1', 'side' );
  add_meta_box( 'singular_memo_settings', 'メモ', 'view_memo_custom_box', 'カスタム投稿タイプ名2', 'side' );
  add_meta_box( 'singular_memo_settings', 'メモ', 'view_memo_custom_box', 'カスタム投稿タイプ名3', 'side' );
  //...
}
endif;

けれど、get_custum_post_types()関数を利用してループ処理をすることで、すべての「カスタム投稿タイプ」に自動で対応させることができます。

// カスタムボックスの自動追加コードサンプル(これだけでは動作しません)
add_action('admin_menu', 'add_memo_custom_box');
if ( !function_exists( 'add_memo_custom_box' ) ):
function add_memo_custom_box(){
  $post_types = get_custum_post_types();
  foreach ($post_types as $post_type) {
    //メモ用ボックス
    add_meta_box( 'singular_memo_settings', 'メモ', 'view_memo_custom_box', $post_type, 'side' );
  }
}
endif;

これだと「カスタム投稿タイプ」を追加するたびに、一つ一つコードを書く必要がなくなるので、かなり楽になります。

難点としては、全ての「カスタム投稿タイプ」に対して処理が行われてしまうということです。例えば、WordPressフォーラムプラグイン(bbPress)等をインストールしている場合は、forum、topic、replyといったような、「プラグイン側が指定しているカスタム投稿タイプ」まで出力されます。

まとめ

難点もあるとはいえ「カスタム投稿タイプ名」さえわかれば、いろいろな操作を制御することが可能になります。

処理を行いたくない「カスタム投稿タイプ名」だった場合は、除外するなどしてフィルタリング等で対応もできると思います。

ということで、うまく利用すると「カスタム投稿」周りの設定を、ある程度自動化出来るようになるかと思います。