has_post_format () против get_post_format ()

10

Я только что вошел в концепцию почтовых форматов и мне стало интересно, почему две из 3 функций из почтового формата «API» предлагают абсолютно одинаковую функциональность. Рассмотрим следующие две концепции (A и 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;

Может кто-нибудь объяснить мне, почему эти две функции, а не только ex. get_post_format? Если бы вы могли предложить мне несколько примеров ситуаций, когда одна не способна на что-то, что может сделать другая функция, я был бы особенно счастлив и получил +1.

кайзер
источник

Ответы:

12

редактировать

has_post_format()требует строку, $formatкак первый параметр; Это означает, что его можно использовать только для проверки явных типов после форматирования:

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

Чтобы определить, имеет ли пост какой-либо формат поста, используйте get_post_format(), который вернется, falseесли текущему посту не присвоен формат поста:

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

Обратите внимание, что «стандартный» - это не фактический пост-формат, а термин- заполнитель для постов, которым не присвоен формат поста. Внутренне WordPress возвращает, falseа не post-format-standardзапрашивает «стандартный» тип постформатного формата, который вы бы просто использовали if ( false == get_post_format() ).

оригинал

has_post_format() возвращает значение BOOLEAN, которое полезно для условных выражений, например:

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

или

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

get_post_format()возвращает строковое значение текущего типа формата записи, что полезно несколькими способами. Одним из наиболее мощных является вызов различных файлов деталей шаблона в зависимости от формата записи, например:

get_template_part( 'entry', get_post_format() )

Который будет включать, например, «entry-aside.php» для формата aside или «entry.php» для стандартного формата.

Чип Беннетт
источник
Это get_template_partдействительно умный!
Кайзер
Беннет - полный забыл пометить ваш A как решение. Btw: Все Как было upvoted :)
Кайзер
1
if ( ! has_post_format() ) {}возвращает предупреждение (по крайней мере для 3.5-RC1), поскольку 1-й (обязательный) аргумент отсутствует. codex.wordpress.org/Function_Reference/has_post_format
glueckpress
4

Следующая часть не верна, я создал заявку, чтобы запросить это улучшение.

has_post_format()является более гибким, потому что он опирается на то has_term(), что опирается на is_object_in_term(). Это означает, что вы можете передать массив форматов сообщений, и он вернется, trueесли сообщения имеют один из этих форматов.

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

В оригинальной спецификации уже упоминалось и то, get_post_format()и другое has_post_format(), возможно, потому что она основана на системе таксономии, которая также имеет обе функции?

Ян Фабри
источник
О, безусловно, это еще больше расширяет то, что вы можете здесь сделать, позволяя вам проверять определенные форматы, чтобы получить свой верный / ложный ответ.
Дрю Гурли
Заставляет меня задуматься, имеет ли смысл просто использовать is_object_in_term()вместо этого функцию.
Кайзер
1
@Jan Fabry has_post_format()ожидает строку в качестве первого параметра. Массив не удастся.
fuxia
1
@toscho: Черт, я знал, что должен был проверить это, а не просто взглянуть на код. Тогда это несовместимо с другими has_*функциями - я создал билет для этого.
Ян Фабри
2
@Jan Fabry Это очень крутой способ исправить твой ответ. :)
fuxia
3

Проще говоря, has_post_format () возвращает значение true / false (Boolean), которое полезно в операторах IF, а get_post_format () возвращает формат записи, если он существует, и, возможно, NULL или false, если его там нет. Использование логических значений - это хороший чистый способ убедиться, что ваши условия всегда ведут себя так, как вы ожидали, а функция has_post_format () допускает приятные короткие условия:

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

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

Кроме того, это просто соответствует другим существующим функциональным возможностям WordPress. В то время как ваш вариант B делает что-то, он требует немного больше специальных знаний, чем, возможно, знакомому пользователю WordPress с уровнем чуть выше среднего.

Дрю Гурли
источник
Напоминает мне get_adjacent_postи next_post_linkпрочее.
Кайзер