has_post_format()与get_post_format()


10

我只是进入了帖子格式的概念,并且想知道为什么帖子格式“ 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。

Answers:


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”(用于备用格式)或“ entry.php”(用于标准格式)。


get_template_part是真聪明!
kaiser

Bennet-完全忘记将您的A标记为解决方案。顺便说一句:所有被赞成:)
kaiser

1
if ( ! has_post_format() ) {}因为缺少第一个(必需)参数,所以将返回警告(至少从3.5-RC1起)。codex.wordpress.org/Function_Reference/has_post_format
gumckpress 2012年

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(),也许是因为它建立在同时具有两个功能的分类系统之上?


哦,当然,这允许您检查特定的格式以取回正确/错误答案,从而进一步扩展了您在此处可以执行的操作。
Drew Gourley

让我想想简单地使用该is_object_in_term()函数是否有意义。
kaiser

1
@Jan Fabry has_post_format()希望将字符串作为第一个参数。阵列将失败。
fuxia

1
@toscho:达恩,我知道我应该测试一下,而不仅仅是浏览代码。然后它与其他has_*功能不一致-我已经为其创建了票证
日1

2
@Jan Fabry这是修正答案的一种很酷的方法。:)
fuxia

3

简单来说,has_post_format()返回一个true / false(布尔值)值,该值在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东西。
kaiser
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.