Wie teste ich, ob ein Beitrag ein benutzerdefinierter Beitragstyp ist?

103

Ich suche nach einer Möglichkeit, um zu testen, ob es sich bei einem Beitrag um einen benutzerdefinierten Beitragstyp handelt. Zum Beispiel kann ich in der Seitenleiste folgenden Code eingeben:

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

Ich möchte den Code nur für einen benutzerdefinierten Beitragstyp testen.

Adam Thompson
quelle

Antworten:

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

Die oben ist , truewenn eine Stelle des benutzerdefinierten Post - Typs wird angezeigt: book.

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

Das Obige gilt, truewenn ein Beitrag der benutzerdefinierten Beitragstypen angezeigt wird: newspaperoder book.

Diese und weitere bedingte Tags können hier angezeigt werden .

Mark Rummel
quelle
27

Fügen Sie dies zu Ihrer hinzu functions.php, und Sie können die Funktionalität innerhalb oder außerhalb der Schleife haben:

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

So können Sie jetzt Folgendes verwenden:

if (is_single() && is_post_type('post_type')){
    // Work magic
}
Milder Flaum
quelle
Danke, das ist sehr nützlich! Aber es sollte sein: if (is_single () && is_post_type ('post_type')) {// work magic} Die schließende Klammer fehlte .... Viele Grüße, Ethel
Funktioniert das nicht mehr für andere? Ich habe das seit Ewigkeiten benutzt, aber plötzlich funktionierte es nicht mehr für mich. Die gleiche Methode ohne globales $ wp_query funktioniert jedoch immer:if ( 'post-type' == get_post_type() ) {}
turtledropbomb
is_post_type () wird abgeschrieben.
Lisa Cerilli
23

Um zu testen, ob es sich bei einem Beitrag um einen benutzerdefinierten Beitragstyp handelt, rufen Sie die Liste aller nicht integrierten Beitragstypen ab und prüfen Sie, ob sich der Beitragstyp in dieser Liste befindet.

Als eine Funktion:

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

Verwendungszweck:

if ( is_custom_post_type() )
    print 'This is a custom post type!';
fuxia
quelle
Dies sollte die akzeptierte Antwort sein.
Aalaap
10

Wenn Sie aus irgendeinem Grund bereits Zugriff auf die globale Variable $ post haben, können Sie einfach verwenden

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

Wenn Sie eine Platzhalterprüfung für alle Ihre benutzerdefinierten Beitragstypen wünschen:

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

Auf diese Weise müssen Sie den Namen Ihres benutzerdefinierten Posts nicht kennen. Der Code funktioniert auch dann noch, wenn Sie den Namen Ihres benutzerdefinierten Beitrags später ändern.

kosinix
quelle