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.

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 .


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
}

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!';

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") {
}

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.