has_post_format () vs. get_post_format ()

10

Eu acabei de entrar no conceito de formatos de postagem e fiquei me perguntando por que há duas de três funções da oferta de "API" de pós-forma com 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. %código%? Se você pudesse me oferecer alguns exemplos de situações em que a pessoa não é capaz de fazer algo que a outra função possa fazer, eu ficaria muito feliz e a marcarei com +1.

    
por kaiser 08.04.2011 / 12:57

3 respostas

12

Editar

has_post_format() requer uma string, $format , como o primeiro parâmetro; o que significa que só pode ser usado para testar tipos explícitos de pós-formatação:

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

Para determinar se uma postagem tem qualquer formato de postagem, use get_post_format() , que retornará false se 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 o "padrão" não é um pós-formato real , mas sim um termo espaço reservado para postagens que não têm um formato de postagem atribuído. Internamente, o WordPress retorna false em vez de post-format-standard , portanto, para consultar o tipo de pós-formato "padrão", você usaria apenas 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 diferentes arquivos de peça de modelo com base no formato de postagem, por exemplo:

get_template_part( 'entry', get_post_format() )

Que incluirá, por exemplo "entry-aside.php" para um formato separado, ou "entry.php" para um formato padrão.

    
por Chip Bennett 08.04.2011 / 18:45
4

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

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

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

O bilhete de especificação original já mencionado ambos get_post_format() e has_post_format() , talvez porque se baseia no sistema de taxonomia que também tem ambas as funções?

    
por Jan Fabry 08.04.2011 / 13:45
3

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

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 encaixa em outras funcionalidades existentes do WordPress. Enquanto sua opção B faz as coisas, requer um pouco mais de conhecimento especializado do que talvez o usuário do WordPress ligeiramente acima da média esteja familiarizado.

    
por Drew Gourley 08.04.2011 / 13:30