WordPressを利用していて、特殊な投稿をしたい場合は「カスタム投稿」を利用している人も多いかと思います。
設定方法はこちら。
上記のような設定をしている場合、『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;
これだと「カスタム投稿タイプ」を追加するたびに、一つ一つコードを書く必要がなくなるので、かなり楽になります。
まとめ
難点もあるとはいえ「カスタム投稿タイプ名」さえわかれば、いろいろな操作を制御することが可能になります。
処理を行いたくない「カスタム投稿タイプ名」だった場合は、除外するなどしてフィルタリング等で対応もできると思います。
ということで、うまく利用すると「カスタム投稿」周りの設定を、ある程度自動化出来るようになるかと思います。