has_post_format () vs. get_post_format ()

10

Acabei de entrar no conceito de formatos de postagem e me perguntei por que existem duas de três funções no formato de API "API" que oferecem absolutamente a mesma funcionalidade. Considere os dois conceitos a seguir (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;

Alguém poderia me explicar por que existem essas duas funções em vez apenas ex. get_post_format? Se você pudesse me oferecer alguns exemplos de situações em que uma não é capaz de algo que a outra função possa fazer, eu ficaria feliz e marcaria com +1.

kaiser
fonte

Respostas:

12

Editar

has_post_format()requer uma string,, $formatcomo o primeiro parâmetro; o que significa que ele só pode ser usado para testar tipos explícitos de pós-formato:

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

Para determinar se uma postagem tem algum formato, use get_post_format(), que retornará falsese a postagem atual não tiver um formato de postagem atribuído:

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

Observe que "padrão" não é um formato de postagem real , mas um termo de espaço reservado para postagens que não possuem um formato de postagem atribuído. Internamente, o WordPress retorna, em falsevez de post-format-standard, para consultar o tipo de pós-formato "padrão", você apenas usaria if ( false == get_post_format() ).

Original

has_post_format() retorna um valor BOOLEAN, que é útil para condicionais, por exemplo:

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()retorna o valor da string do tipo de formato de postagem atual, que é útil de várias maneiras. Um dos mais poderosos é chamar arquivos de peças de modelos diferentes com base no formato de postagem, por exemplo:

get_template_part( 'entry', get_post_format() )

O que incluirá, por exemplo, "entry-apart.php" para um formato reservado ou "entry.php" para um formato padrão.

Chip Bennett
fonte
O get_template_parté realmente inteligente!
kaiser
Bennet - esqueci completamente de marcar seu A como solução. Btw: Todos Como foram upvoted :)
kaiser
11
if ( ! has_post_format() ) {}retorna um aviso (pelo menos de 3.5-RC1), pois o primeiro argumento (obrigatório) está ausente. codex.wordpress.org/Function_Reference/has_post_format
glueckpress
4

A parte a seguir não está correta, criei um ticket para solicitar esse aprimoramento.

has_post_format()é mais flexível porque se baseia has_term(), que se baseia is_object_in_term(). Isso significa que você pode passar uma variedade de formatos de postagem e ele retornará truese as postagens tiverem um desses formatos.

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

O tíquete de especificação original já mencionou os dois get_post_format()e has_post_format(), talvez porque se baseia no sistema de taxonomia que também possui as duas funções?

Jan Fabry
fonte
Definitivamente, isso amplia ainda mais o que você pode fazer aqui, permitindo verificar formatos específicos para recuperar sua resposta verdadeira / falsa.
Tirou Gourley
Faz-me pensar se faria sentido simplesmente usar a is_object_in_term()função.
Kaiser #
11
@Jan Fabry has_post_format()espera uma string como primeiro parâmetro. Uma matriz falhará.
fuxia
11
@toscho: Droga, eu sabia que deveria ter testado isso em vez de apenas olhar para o código. Então é inconsistente com outras has_*funções - eu criei um ticket para ele.
Jan Fabry
2
@ Jan Fabry Essa é uma maneira muito legal de corrigir sua resposta. :)
fuxia
3

Simples, has_post_format () retorna um valor verdadeiro / falso (booleano) que é útil nas instruções IF, enquanto get_post_format () retorna o formato de postagem, se houver, e provavelmente NULL ou false, se não houver. Usar valores booleanos é uma boa maneira limpa de garantir que suas condições sempre se comportem da maneira que você esperava e a função has_post_format () permite condições curtas fáceis e agradáveis:

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

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

Além disso, isso apenas se alinha com outras funcionalidades existentes do WordPress. Embora sua opção B faça as coisas, ela requer um conhecimento um pouco mais especializado do que talvez o usuário do WordPress um pouco acima da média esteja familiarizado.

Drew Gourley
fonte
Me lembra o get_adjacent_poste next_post_linkoutras coisas.
Kaiser #