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.

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.


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?


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.


Cela me rappelle la get_adjacent_postet des next_post_linkchoses.
kaiser
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.