Comment tester si un message est un type de message personnalisé?

104

Je recherche un moyen de vérifier si un message est un type de message personnalisé. Par exemple, dans la barre latérale, par exemple, je peux mettre un code comme celui-ci:

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

Je veux tester le code uniquement pour un type de message personnalisé.

Adam Thompson
la source

Réponses:

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

Ce qui précède est truelors de l' affichage d' un poste du type de poste personnalisé: book.

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

Ce qui précède trues’applique lors de la visualisation d’une publication de type personnalisé: newspaperou book.

Ces balises et plus conditionnelles peuvent être consultées ici .

Mark Rummel
la source
27

Ajoutez ceci à votre functions.php, et vous pouvez avoir la fonctionnalité, à l'intérieur ou à l'extérieur de la boucle:

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

Donc, vous pouvez maintenant utiliser ce qui suit:

if (is_single() && is_post_type('post_type')){
    // Work magic
}
Fuzz doux
la source
Merci, c'est très utile! Mais cela devrait être: if (is_single () && is_post_type ('post_type')) {// magie du travail} Le crochet de fermeture manquait ...
Cela a-t-il cessé de fonctionner pour quelqu'un d'autre? Je l'utilise depuis des lustres, mais tout à coup, cela a cessé de fonctionner pour moi. Cependant, utiliser la même méthode sans $ wp_query global fonctionne toujours:if ( 'post-type' == get_post_type() ) {}
turtledropbomb le
is_post_type () est amorti.
Lisa Cerilli
23

Pour vérifier si une publication est un type de publication personnalisé, récupérez la liste de tous les types de publication non intégrés et testez si le type de publication est dans cette liste.

En tant que fonction:

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

Usage:

if ( is_custom_post_type() )
    print 'This is a custom post type!';
fuxia
la source
Cela devrait être la réponse acceptée.
aalaap
10

Si pour une raison quelconque vous avez déjà accès à la variable globale $ post, vous pouvez simplement utiliser

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

Si vous souhaitez une vérification avec caractère générique pour tous vos types de publication personnalisés:

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

De cette façon, vous n'avez pas besoin de connaître le nom de votre message personnalisé. De plus, le code fonctionne toujours même si vous modifiez le nom de votre publication personnalisée ultérieurement.

Kosinix
la source