has_post_format () vs. get_post_format ()


10

방금 포스트 형식 의 개념에 들어갔고 왜 포스트 형식 "API"의 3 가지 기능 중 2 가지가 동일한 기능을 제공하는지 궁금했습니다. 다음 두 가지 개념 (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"또는 표준 형식의 경우 "entry.php"가 포함됩니다.


get_template_part정말 똑똑!
kaiser

베넷-A를 솔루션으로 표시하는 것을 잊었습니다. Btw : All upvoted :)
kaiser

1
if ( ! has_post_format() ) {}첫 번째 (필수) 인수가 없기 때문에 (3.5-RC1 이상) 경고를 반환합니다. 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()그것은 또한 두 기능이있는 분류 시스템을 기반으로 구축 어쩌면 때문에?


오, 확실히, 이것은 당신이 당신의 진정한 / 거짓의 대답을 되찾기 위해 특정 형식을 확인할 수있게함으로써 여기서 할 수있는 것을 더욱 확장시킵니다.
Drew Gourley

단순히 is_object_in_term()함수를 대신 사용하는 것이 합리적이라고 생각합니다 .
kaiser

1
@Jan Fabry has_post_format()문자열 을 첫 번째 매개 변수로 예상합니다 . 배열이 실패합니다.
fuxia

1
@ toscho : Darn, 코드를 보는 대신 테스트해야한다는 것을 알았습니다. 그런 다음 다른 has_*기능 과 일치하지 않습니다 . 티켓만들었 습니다.
Jan Fabry

2
@Jan Fabry 답을 고칠 수있는 아주 멋진 방법입니다. :)
fuxia

3

간단한 has_post_format ()은 IF 문에 유용한 true / false (부울) 값을 반환하는 반면 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물건.
카이저
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.