Jak sprawdzić, czy post jest niestandardowym typem postu?

103

Szukam sposobu sprawdzenia, czy post jest niestandardowym typem postu. Na przykład na pasku bocznym, który mogę wstawić w taki sposób:

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

Chcę testować kod tylko dla niestandardowego typu postu.

Adam Thompson
źródło

Odpowiedzi:

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

Powyższe jest truepodczas oglądania stanowisko niestandardowego typu postu: book.

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

Powyższe dotyczy trueprzeglądania postu niestandardowych typów postów: newspaperlub book.

Te i więcej tagów warunkowych można obejrzeć tutaj .

Mark Rummel
źródło
27

Dodaj to do swojego functions.php, a możesz mieć funkcjonalność wewnątrz lub na zewnątrz pętli:

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

Możesz teraz użyć następujących opcji:

if (is_single() && is_post_type('post_type')){
    // Work magic
}
Łagodny Fuzz
źródło
Dziękuję, to jest bardzo przydatne! Ale powinno być: if (is_single () && is_post_type ('post_type')) {// magia pracy} Brakowało nawiasu zamykającego .... Wiele pozdrowień, Ethel
Czy to przestało działać dla kogoś innego? Używałem tego od wieków, ale nagle przestało to dla mnie działać. Jednak użycie tej samej metody bez globalnego $ wp_query zawsze działa:if ( 'post-type' == get_post_type() ) {}
turtledropbomb
is_post_type () jest amortyzowany.
Lisa Cerilli,
23

Aby sprawdzić, czy post jest dowolny niestandardowy typ poczta, pobrać listę wszystkich Niewbudowane typów pocztowych i testu jeśli typ słupka jest w tym wykazie.

Jako funkcja:

/**
 * 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 );
}

Stosowanie:

if ( is_custom_post_type() )
    print 'This is a custom post type!';
fuxia
źródło
To powinna być zaakceptowana odpowiedź.
aalaap
10

Jeśli z jakiegoś powodu masz już dostęp do zmiennej globalnej $ post, możesz po prostu użyć

if ($post->post_type == "your desired post type") {
}
ja nie
źródło
5

Jeśli chcesz sprawdzić symbol wieloznaczny dla wszystkich niestandardowych typów postów:

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

W ten sposób nie musisz znać nazwy swojego niestandardowego postu. Kod nadal działa, nawet jeśli później zmienisz nazwę swojego niestandardowego posta.

Kosinix
źródło