问题描述

我刚刚进入后期格式的概念,并且想知道为什么有三个功能中的两个从后期格式”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;

有人可以解释一下,为什么有这两个功能,而不是前。 get_post_format?如果你能给我一些例子,其中一个不能够做另一个功能的事情,我会特别高兴,并+1 。

最佳解决方案

Edit

has_post_format()需要一个字符串 $format 作为第一个参数; 这意味着它只能用于测试显式的 post-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
}

请注意,”standard” 不是实际的 post-format,而是一个没有分配帖子格式的帖子的占位符。在内部,WordPress 返回 false 而不是 post-format-standard,因此,要查询”standard” post-format 类型,您只需使用 if ( false == get_post_format() )

Original

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” 为标准格式,或”entry.php” 为标准格式。

次佳解决方案

以下部分是不正确的,我有 created a ticket 要求这个增强。

has_post_format()更灵活,因为它建立在基于 is_object_in_term()has_term()上。这意味着您可以传递一系列的 Post 格式,如果帖子具有这些格式之一,它将返回 true

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

原来的规格票 already mentioned 都是 get_post_format()has_post_format(),也许是因为它建立在既具有两个功能的分类系统上?

第三种解决方案

简单的说, has_post_format() 返回一个在 IF 语句中有用的 true /false(Boolean) 值,而 get_post_format() 返回 post 格式 (如果存在),如果没有,则返回 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 可以完成任务,但它需要比 above-average WordPress 用户熟悉的更专业的知识。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。