has_post_format () vs. get_post_format ()

10

Acabo de entrar en el concepto de formatos de publicación y me preguntaba por qué hay dos de las 3 funciones del formato de publicación "API" que ofrecen absolutamente la misma funcionalidad. Considere los siguientes dos conceptos (A vs. 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;

¿Podría alguien explicarme por qué hay esas dos funciones en lugar de solo ex. get_post_format? Si pudiera ofrecerme algunos ejemplos de situaciones en las que la una no es capaz de hacer algo que la otra función puede hacer, estaría especialmente feliz y lo haría +1.

emperador
fuente

Respuestas:

12

Editar

has_post_format()requiere una cadena, $formatcomo primer parámetro; lo que significa que solo se puede usar para probar tipos de formato posterior explícitos:

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

Para determinar si una publicación tiene algún formato de publicación, use get_post_format(), que regresará falsesi la publicación actual no tiene un formato de publicación asignado:

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

Tenga en cuenta que "estándar" no es un formato de publicación real , sino más bien un término de marcador de posición para las publicaciones que no tienen un formato de publicación asignado. Internamente, WordPress devuelve en falselugar de post-format-standard, por lo tanto, consultar el tipo de formato posterior "estándar", simplemente usaría if ( false == get_post_format() ).

Original

has_post_format() devuelve un valor BOOLEAN, que es útil para condicionales, por ejemplo:

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

o

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

get_post_format()devuelve el valor de cadena del tipo de formato de publicación actual, que es útil de varias maneras. Uno de los más potentes es llamar a diferentes archivos de parte de plantilla según el formato de publicación, por ejemplo:

get_template_part( 'entry', get_post_format() )

Lo que incluirá, por ejemplo, "entry-aside.php" para un formato aparte, o "entry.php" para un formato estándar.

Chip Bennett
fuente
El get_template_partes realmente inteligente!
kaiser
Bennet - complete olvidó marcar su A como solución. Por cierto: Todos los que fueron votados :)
kaiser
1
if ( ! has_post_format() ) {}devuelve una advertencia (al menos desde 3.5-RC1) ya que falta el primer argumento (requerido). codex.wordpress.org/Function_Reference/has_post_format
glueckpress
4

La siguiente parte no es correcta, he creado un ticket para solicitar esta mejora.

has_post_format()es más flexible porque se basa en has_term(), que se basa en is_object_in_term(). Esto significa que puede pasar una variedad de formatos de publicación y volverá truesi las publicaciones tienen uno de estos formatos.

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

El boleto de especificación original ya mencionó ambos get_post_format()y has_post_format(), tal vez porque se basa en el sistema de taxonomía que también tiene ambas funciones.

Jan Fabry
fuente
Ah, definitivamente, esto amplía aún más lo que puede hacer aquí al permitirle verificar formatos específicos para obtener su respuesta verdadera / falsa.
Drew Gourley
Me hace pensar si tendría sentido simplemente usar la is_object_in_term()función en su lugar.
kaiser
1
@ Jan Fabry has_post_format()espera una cadena como primer parámetro. Una matriz fallará.
fuxia
1
@toscho: Maldición, sabía que debería haberlo probado en lugar de solo mirar el código. Entonces es inconsistente con otras has_*funciones: he creado un ticket para ello.
Jan Fabry
2
@ Jan Fabry Esa es una forma genial de arreglar tu respuesta. :)
fuxia
3

Simple, has_post_format () devuelve un valor verdadero / falso (booleano) que es útil en las declaraciones IF, mientras que get_post_format () devuelve el formato de publicación, si existe, y probablemente NULL o falso si no está allí. El uso de valores booleanos es una buena manera limpia de asegurarse de que sus condiciones siempre se comporten de la manera que esperaba y la función has_post_format () permite condiciones cortas y agradables:

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

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

Además, esto simplemente coincide con otras funciones existentes de WordPress. Si bien su opción B hace las cosas, requiere un conocimiento un poco más especializado que quizás el usuario de WordPress ligeramente superior al promedio esté familiarizado.

Drew Gourley
fuente
Me recuerda a los get_adjacent_posty next_post_linkesas cosas.
Kaiser