Frage

Ich suche nach einer Möglichkeit, zu testen, ob ein Beitrag ein benutzerdefinierter Post -Typ ist. Zum Beispiel in der Seitenleiste, die ich in einen solchen Code einfügen kann:

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

Ich möchte Code -Tests nur für einen benutzerdefinierten Beitragstyp.

War es hilfreich?

Lösung

Hier sind Sie ja: get_post_type() und dann if ( 'book' == get_post_type() ) ... wie per Bedingte Tags> Ein Post -Typ in Codex.

Andere Tipps

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

Das obige ist true Beim Anzeigen eines Beitrags des benutzerdefinierten Post -Typs: book.

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

Das obige ist true Beim Anzeigen eines Beitrags der benutzerdefinierten Post -Typen: newspaper oder book.

Diese und bedingtere Tags kann hier angezeigt werden.

Fügen Sie dies Ihrem 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
}

Zu testen, ob ein Beitrag ist irgendein Benutzerdefinierte Post-Typ, holen Sie die Liste aller nicht eingebauten Post-Typen und testen Sie, ob sich der Posttyp 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!';

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

Wenn Sie einen Wild Card -Überprüfen Sie alle Ihre benutzerdefinierten Beitragstypen:

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top