has_post_format () contre get_post_format ()

10

Je viens d'entrer dans le concept des formats de publication et je me demandais pourquoi il existe deux fonctions sur 3 du format de publication "API" qui offrent absolument la même fonctionnalité. Considérez les deux concepts suivants (A contre B):

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post();

        // A) has_post_format
        if ( has_post_format('format') )
        {
            the_excerpt(); // some special formating
        }

        // VERSUS:

        // B) 
        if ( get_post_format( $GLOBALS['post']->ID ) == 'format' )
        {
            the_excerpt(); // some special formating
        }

    } // endwhile;
} // endif;

Quelqu'un pourrait-il m'expliquer pourquoi il y a ces deux fonctions à la place seulement ex. get_post_format? Si vous pouviez me proposer des exemples de situations où l'une n'est pas capable de faire quelque chose que l'autre fonction peut faire, je serais particulièrement heureux et je lui attribuerais +1.

kaiser
la source

Réponses:

12

Éditer

has_post_format()requiert une chaîne, $formatcomme premier paramètre; ce qui signifie qu'il ne peut être utilisé que pour tester des types de post-format explicites:

if ( has_post_format( $format ) {
    // Current post has the $format post format;
    // do something
}

Pour déterminer si une publication a un format de publication, utilisez get_post_format(), qui retournera falsesi la publication actuelle n'a pas de format de publication attribué:

if ( false != get_post_format() ) {
    // Current post has a post format;
    // do something
}

Notez que "standard" n'est pas un format de publication réel , mais plutôt un terme d' espace réservé pour les publications auxquelles aucun format de publication n'est affecté. En interne, WordPress renvoie falseplutôt que post-format-standard, donc, pour rechercher le type de post-format "standard", vous utiliseriez simplement if ( false == get_post_format() ).

Original

has_post_format() renvoie une valeur BOOLEAN, qui est utile pour les conditions, par exemple:

if ( ! has_post_format() ) {
     // I'm a standard-format post; do something
}

ou

if ( has_post_format( array( 'gallery', 'image' ) ) {
     // I'm a gallery or image format post; do something
}

get_post_format()renvoie la valeur de chaîne du type de format de publication actuel, ce qui est utile de plusieurs manières. L'un des plus puissants consiste à appeler différents fichiers de pièces de modèle en fonction du format de publication, par exemple:

get_template_part( 'entry', get_post_format() )

Ce qui inclura, par exemple, "entry-apart.php" pour un format apart, ou "entry.php" pour un format standard.

Chip Bennett
la source
C'est get_template_partvraiment intelligent!
kaiser
Bennet - complet oublié de marquer votre A comme solution. Btw: Tous les ont été votés :)
kaiser
1
if ( ! has_post_format() ) {}renvoie un avertissement (à partir de 3.5-RC1 au moins) car le 1er argument (obligatoire) est manquant. codex.wordpress.org/Function_Reference/has_post_format
glueckpress
4

La partie suivante n'est pas correcte, j'ai créé un ticket pour demander cette amélioration.

has_post_format()est plus flexible car il s'appuie sur has_term(), qui s'appuie sur is_object_in_term(). Cela signifie que vous pouvez passer un tableau de formats de publication et il reviendra truesi les publications ont l'un de ces formats.

if ( has_post_format( array( 'aside', 'video' ) ) {
    // It's an aside or a video
}

Le ticket de spécification d'origine a déjà mentionné les deux get_post_format()et has_post_format()peut-être parce qu'il s'appuie sur le système de taxonomie qui a également les deux fonctions?

Jan Fabry
la source
Oh, certainement, cela étend ce que vous pouvez faire ici en vous permettant de vérifier des formats spécifiques afin d'obtenir votre réponse vraie / fausse.
Drew Gourley
Me fait penser s'il serait judicieux d'utiliser simplement la is_object_in_term()fonction à la place.
kaiser
1
@Jan Fabry has_post_format()attend une chaîne comme premier paramètre. Un tableau échouera.
fuxia
1
@toscho: Bon sang, je savais que j'aurais dû tester cela au lieu de simplement regarder le code. Ensuite, il est incompatible avec d'autres has_*fonctions - j'ai créé un ticket pour cela.
Jan Fabry
2
@Jan Fabry C'est une façon très cool de corriger votre réponse. :)
fuxia
3

Simple, has_post_format () renvoie une valeur vrai / faux (booléen) qui est utile dans les instructions IF, tandis que get_post_format () renvoie le format de publication, s'il existe, et probablement NULL ou faux s'il n'y en a pas. L'utilisation de valeurs booléennes est un bon moyen de s'assurer que vos conditions se comportent toujours comme vous vous y attendiez et la fonction has_post_format () permet des conditions brèves faciles et agréables:

if ( has_post_format() ) {
  //yes we do
} else {
  //no we do not
}

if ( !has_post_format() ) {
  //no we do not
} else {
  //yes we do
}

En outre, cela correspond simplement aux autres fonctionnalités WordPress existantes. Bien que votre option B fasse avancer les choses, elle nécessite un peu plus de connaissances spécialisées que peut-être l'utilisateur WordPress légèrement supérieur à la moyenne.

Drew Gourley
la source
Cela me rappelle la get_adjacent_postet des next_post_linkchoses.
kaiser