組み込みの投稿タイプとカスタムの投稿タイプの両方を含むリストを取得しようとしています。
$post_types = get_post_types(array(
'public' => TRUE,
), 'objects');
上記はほとんど動作しますが、このリストからattachment
を除外し、editor
、title
、thumbnail
などの特定のサポートを持つ投稿タイプのみを返します。これは可能ですか?
私は get_post_types_by_support()
が望ましい結果を得るための解決策のように思われることを知りました:
$post_types = get_post_types_by_support(array('title', 'editor', 'thumbnail'));
上記はpost
、page
、およびtitle
、editor
、thumbnail
をサポートする任意のカスタム投稿タイプを返します。
これは私用の投稿タイプも返すので、リストをループしてフロントエンドでそのタイプが表示可能かどうかをチェックすることができます。これは is_post_type_viewable()
関数を使って行うことができます。
foreach ($post_types as $key => $post_type) {
if (!is_post_type_viewable($post_type)) {
unset($post_types[$post_type]);
}
}
get_post_types()
は ポスト型オブジェクトのフィールドにマッチする引数の配列を受け取ります 。だから、あなたはこのようなことをすることができます(未テスト):
$post_types = get_post_types(array(
'public' => true,
'supports' => array( 'editor', 'title', 'thumbnail' )
), 'objects');
残念ながら、この関数では「除外」のようなsometingを設定することはできません。また、 正確に 'editor', 'title', 'thumbnail'
をサポートする投稿タイプのみが取得されます。
あるいは、get_post_types_by_support()
を使用することもできます(WP 4.5以上の場合のみ。また、この関数で特定の投稿タイプを除外することはできませんが、editor, title, thumbnail
をサポートする特定のケースでは、添付ファイルの投稿タイプはほとんどの場合は除外されます)。
$post_types = get_post_types_by_support( array( 'editor', 'title', 'thumbnail' ) );
いずれにしてもうまくいくようなものが欲しいのであれば、私はより広い基準に基づいて投稿タイプを取得してから、次のような独自の配列を作成しようとします。
$_post_types = get_post_types_by_support( array( 'editor', 'title', 'thumbnail' ) );
$post_types = [];
foreach($_post_types as $post_type) {
// In most cases, attachment post type won't be here, but it can be
if( $post_type->name !== 'attachment' ) {
$post_types[] = $post_type;
}
}
OPの質問に対する最も簡単なアプローチは、返された配列から 'attachment'の設定を解除することです。
$post_types = get_post_types(array('public' => TRUE,), 'objects');
unset($post_types['attachment']);
他のソリューションほどエレガントではありませんが、オーバーヘッドは最も少なくなります。