web-dev-qa-db-ja.com

投稿がカスタム投稿タイプかどうかをテストするにはどうすればよいですか。

投稿がカスタム投稿タイプかどうかをテストする方法を探しています。例えば、例えば、私はこのようなコードを入れることができるサイドバーで:

 if ( is_single() ) {
     // Code here
 }

カスタム投稿タイプ専用のコードテストが必要です。

99
Adam Thompson

get_post_type() そしてif ( 'book' == get_post_type() ) .../ 条件付きタグ>投稿タイプ Codexで。

128
if ( is_singular( 'book' ) ) {
    // conditional content/code
}

カスタム投稿タイプtrueの投稿を表示すると、上記はbookです。

if ( is_singular( array( 'newspaper', 'book' ) ) ) {
    //  conditional content/code
}

カスタム投稿タイプの投稿を表示する場合、上記はtrueです:newspaperまたはbook

これらの条件付きタグ ここで見ることができます

159
Mark Rummel

これをfunctions.phpに追加すれば、ループの内側または外側に機能を持たせることができます。

function is_post_type($type){
    global $wp_query;
    if($type == get_post_type($wp_query->post->ID)) 
        return true;
    return false;
}

それで、あなたは今、以下を使うことができます:

if (is_single() && is_post_type('post_type')){
    // Work magic
}
27
Mild Fuzz

投稿が any カスタム投稿タイプであるかどうかをテストするには、組み込みの投稿タイプではないすべてのリストを取得し、その投稿のタイプがそのリストにあるかどうかをテストします。

機能として:

/**
 * Check if a post is a custom post type.
 * @param  mixed $post Post object or ID
 * @return boolean
 */
function is_custom_post_type( $post = NULL )
{
    $all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );

    // there are no custom post types
    if ( empty ( $all_custom_post_types ) )
        return FALSE;

    $custom_types      = array_keys( $all_custom_post_types );
    $current_post_type = get_post_type( $post );

    // could not detect current type
    if ( ! $current_post_type )
        return FALSE;

    return in_array( $current_post_type, $custom_types );
}

使用法:

if ( is_custom_post_type() )
    print 'This is a custom post type!';
23
fuxia

何らかの理由でグローバル変数$ postにすでにアクセスしている場合は、単純に次のようにします。

if ($post->post_type == "your desired post type") {
}
10
ino

すべてのカスタム投稿タイプをワイルドカードでチェックしたい場合は、

if( ! is_singular( array('page', 'attachment', 'post') ) ){
    // echo 'Imma custom post type!';
}

これにより、カスタム投稿の名前を知る必要がなくなります。後でカスタム投稿の名前を変更しても、コードは機能します。

5
kosinix