web-dev-qa-db-ja.com

アーカイブテンプレートにカスタム投稿タイプが表示されているかどうかを確認する方法

特定のカスタム投稿タイプがデフォルトのアーカイブページまたは検索結果に表示されるかどうかを判断する方法はありますか?

例えば(ひどい)booksという名前の投稿タイプを考えると、コードでを伝える方法があります以下のいずれか

  • 書籍が日付アーカイブに表示される場合
  • 書籍が検索結果に表示された場合
  • 書籍が著者アーカイブに表示される場合

これらにカスタム投稿タイプを表示する方法を知っていますが、私は少し掘り下げることを行っていて、特定のカスタム投稿タイプが上記のいずれかに表示されるかどうかを判断する明確な方法を見つけることができません。

私がこれを探している主な理由は、テーマのカスタムブレッドクラムバーを作成しているからです。そして、表示されているカスタム投稿が著者の機能をサポートしている場合は著者ブレッドクラムバーを表示できるといいですねが著者アーカイブに表示されます。

1
Privateer

あなたは 投稿タイプオブジェクト を取得し、そのプロパティをチェックすることができます。例えば:

$post_type = get_post_type_object( 'books' );
if( $post_type->exclude_from_search ) {
    // The post type is not included in search results
}
if( $post_type->has_archive ) {
    // The post type has archive
}

私が知っている限りでは、カスタム投稿タイプは、あなたがそれをコーディングしなければ日付アーカイブや作者アーカイブには含まれません(例えば pre_get_posts を使う)。つまり、投稿タイプを登録している間は、これらのオプションは使用できません。そのため、投稿タイプのオブジェクトから確認する方法はありません。

3
cybmeta

あなたが前面にいる場合、テンプレートでは is_post_type_archive( $post_types ) コンディショナルタグ関数を使うことができます。 $post_typesは、チェック対象の投稿タイプのstringまたはarrayです。

0
Gregcta