サポートに基づいた投稿タイプのみを取得します


9

組み込みとカスタムの両方の投稿タイプを含むリストを取得しようとしています:

$post_types = get_post_types(array(
  'public' => TRUE,
), 'objects');

上記はほぼ機能しますが、attachmentこのリストからを除外してeditortitleやなどの特定のサポートを持つ投稿タイプのみを返しthumbnailます。これは可能ですか?

回答:


9

私はそれget_post_types_by_support()が望ましい結果を得るための解決策のように見えることを発見しました:

$post_types = get_post_types_by_support(array('title', 'editor', 'thumbnail'));

上記戻りますpostpageと任意のカスタムポストタイプがサポートされていることtitleeditorおよびthumbnail

これはプライベート投稿タイプも返すので、リストをループして、タイプがフロントエンドで表示可能かどうかを確認できます。これは、次のis_post_type_viewable()関数を使用して実行できます。

foreach ($post_types as $key => $post_type) {
  if (!is_post_type_viewable($post_type)) {
    unset($post_types[$post_type]);
  }
}

注:これはほとんどの 場合に機能します。
cybmeta 2018年

4

get_post_types()ポストタイプオブジェクトのフィールドと一致する引数の配列を受け入れます。したがって、次のようなことができます(テストされていません)。

$post_types = get_post_types(array(
  'public'   => true,
  'supports' => array( 'editor', 'title', 'thumbnail' )
), 'objects');

残念ながら、この関数で "exclude"のような設定を行うことはできません。また、厳密 '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;
    }
}

使用supportsしても動作しないようですが?サポートするカスタム投稿タイプがeditorあり、使用するsupports => array('editor')と空の結果が得られますか?あなたの2番目のアプローチはうまくいくようです。
Cyclonecode 2018年

2
get_post_types_by_support()サポートを利用してこれを達成できるようです。
Cyclonecode 2018年

0

OPの質問に対する最も簡単なアプローチは、返された配列から「アタッチメント」の設定を解除することです。

$post_types = get_post_types(array('public' => TRUE,), 'objects');
unset($post_types['attachment']);

他のソリューションほどエレガントではありませんが、オーバーヘッドが最小です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.