Я только что ознакомился с концепцией форматов сообщений и задавался вопросом, почему две из трех функций формата сообщений «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.
Редактировать
has_post_format()
требует строку,$format
в качестве первого параметра; что означает, что его можно использовать только для проверки явных типов постформата:Чтобы определить, имеет ли сообщение какой-либо формат сообщения, используйте
get_post_format()
, которое вернетfalse
значение, если текущему сообщению не назначен формат сообщения:Обратите внимание, что «стандартный» не является фактическим форматом поста, а скорее термином- заполнителем для постов, которым не назначен формат поста. Внутри WordPress возвращает
false
, а неpost-format-standard
, поэтому для запроса «стандартного» типа пост-формата вы должны просто использоватьif ( false == get_post_format() )
.Оригинал
has_post_format()
возвращает значение BOOLEAN, которое полезно для условных выражений, например:или
get_post_format()
возвращает строковое значение текущего типа формата записи, что полезно несколькими способами. Одним из самых мощных является вызов различных файлов частей шаблона в зависимости от формата публикации, например:Который будет включать, например, «entry-aside.php» для дополнительного формата или «entry.php» для стандартного формата.
Это
get_template_part
действительно умный!Беннет — полный забыл отметить ваш A как решение. Кстати: все как были проголосованы 🙂
возвращает предупреждение (по крайней мере, начиная с 3.5-RC1), так как отсутствует 1-й (обязательный) аргумент. codex.wordpress.org/Function_Reference/has_post_format
О, определенно, это еще больше расширяет возможности, которые вы можете здесь сделать, позволяя вам проверять определенные форматы, чтобы получить ответ «истина/ложь».
Заставляет меня задуматься, имеет ли смысл просто использовать эту
is_object_in_term()
функцию вместо этого.@Jan Fabry
has_post_format()
ожидает строку в качестве первого параметра. Массив выйдет из строя.@toscho: Черт, я знал, что должен был протестировать это, а не просто взглянуть на код. Тогда это несовместимо с другими
has_*
функциями — я создал для него тикет.@Jan Fabry Это очень классный способ исправить свой ответ. 🙂
Напоминает
get_adjacent_post
иnext_post_link
прочее.Следующая часть неверна, я создал тикет, чтобы запросить это улучшение.
has_post_format()
является более гибким, потому что он основывается наhas_term()
, который строится наis_object_in_term()
. Это означает, что вы можете передать массив форматов сообщений, и он вернетсяtrue
, если сообщения имеют один из этих форматов.В первоначальном билете спецификации уже упоминались и,get_post_format()
иhas_post_format()
, может быть, потому, что он основан на системе таксономии, которая также имеет обе функции?Проще говоря, has_post_format() возвращает значение true/false (логическое), которое полезно в операторах IF, а get_post_format() возвращает формат сообщения, если он существует, и, возможно, NULL или false, если его нет. Использование логических значений — это хороший чистый способ убедиться, что ваши условия всегда ведут себя так, как вы ожидали, а функция has_post_format() позволяет использовать простые короткие условия:
Кроме того, это соответствует другим существующим функциям WordPress. В то время как ваш вариант B позволяет добиться цели, он требует немного более специализированных знаний, чем, возможно, знакомо пользователю WordPress чуть выше среднего.