web-dev-qa-db-de.com

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

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.

99
Adam Thompson

Hier sind Sie: get_post_type() und dann if ( 'book' == get_post_type() ) ... gemäß Bedingte Tags> Ein Beitragstyp im Codex.

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

Das obige ist true, wenn ein Beitrag vom benutzerdefinierten Beitragstyp angezeigt wird: book.

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

Das obige ist true, wenn Sie einen Beitrag der benutzerdefinierten Beitragstypen anzeigen: newspaper oder book.

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

159
Mark Rummel

Fügen Sie dies zu Ihrem functions.php hinzu, 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;
}

Sie können nun also Folgendes verwenden:

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

Um zu testen, ob ein Beitrag vom Typ any custom ist, rufen Sie die Liste aller nicht integrierten Beitragstypen ab und prüfen Sie, ob der Beitragstyp in dieser Liste enthalten ist.

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

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

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.

5
kosinix