has_post_format () vs. get_post_format ()

10

Właśnie wkroczyłem w koncepcję formatów postów i zastanawiałem się, dlaczego dwie z 3 funkcji z formatu API „post” oferują absolutnie taką samą funkcjonalność. Rozważ następujące dwie koncepcje (A vs. 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;

Czy ktoś mógłby mi wyjaśnić, dlaczego zamiast tych dwóch funkcji są tylko ex. get_post_format? Jeśli mógłbyś podać mi przykłady sytuacji, w których ta jedna nie jest w stanie zrobić czegoś, co może zrobić druga funkcja, byłbym wyjątkowo szczęśliwy i dałbym +1.

kajzer
źródło

Odpowiedzi:

12

Edytować

has_post_format()wymaga ciągu $formatjako pierwszego parametru; co oznacza, że ​​można go używać tylko do testowania wyraźnych typów po formacie:

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

Aby ustalić, czy post ma żadnego postu, wykorzystanie formatu get_post_format(), który powróci false, jeśli aktualny post nie ma przypisanego formatu pocztowy:

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

Pamiętaj, że „standardowy” nie jest rzeczywistym formatem postu, ale jest raczej symbolem zastępczym dla postów, które nie mają przypisanego formatu postu. Wewnętrznie WordPress zwraca, falsezamiast post-format-standardwięc zapytać o „standardowy” typ postformatowy, wystarczy użyć if ( false == get_post_format() ).

Oryginalny

has_post_format() zwraca wartość BOOLEAN, która jest przydatna w przypadku warunkowych, np .:

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

lub

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

get_post_format()zwraca wartość ciągu bieżącego typu formatu postu, co jest przydatne na kilka sposobów. Jednym z najpotężniejszych jest wywoływanie różnych plików części szablonu opartych na formacie postu, np .:

get_template_part( 'entry', get_post_format() )

Który będzie obejmował np. „Entry-aside.php” dla formatu zewnętrznego lub „entry.php” dla standardowego formatu.

Chip Bennett
źródło
To get_template_partjest naprawdę sprytne!
kaiser
Bennet - kompletnie zapomniałeś oznaczyć swoje A jako rozwiązanie. Btw: Wszyscy tacy, którzy zostali przegłosowani :)
Kaiser
1
if ( ! has_post_format() ) {}zwraca ostrzeżenie (przynajmniej od wersji 3.5-RC1), ponieważ brakuje pierwszego (wymaganego) argumentu. codex.wordpress.org/Function_Reference/has_post_format
glueckpress
4

Następująca część jest niepoprawna. Utworzyłem bilet, aby poprosić o to ulepszenie.

has_post_format()jest bardziej elastyczny, ponieważ opiera się na has_term(), na którym opiera się is_object_in_term(). Oznacza to, że możesz przekazać tablicę formatów postów, która zwróci, truejeśli posty mają jeden z tych formatów.

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

W pierwotnym bilecie specyfikacji wymieniono już oba, get_post_format()a has_post_format()może dlatego, że opiera się on na systemie taksonomii, który ma również obie funkcje?

Jan Fabry
źródło
Och, zdecydowanie, to dodatkowo rozszerza to, co możesz tutaj zrobić, pozwalając ci sprawdzić określone formaty, aby odzyskać swoją prawdziwą / fałszywą odpowiedź.
Drew Gourley,
Sprawia, że ​​myślę, czy sensowne byłoby po prostu użycie tej is_object_in_term()funkcji.
kaiser
1
@Jan Fabry has_post_format()oczekuje łańcucha jako pierwszego parametru. Tablica zawiedzie.
fuxia
1
@toscho: Darn, wiedziałem, że powinienem to przetestować, a nie tylko zerknąć na kod. To jest niespójne z innymi has_*funkcjami - stworzyłem na to bilet .
Jan Fabry
2
@Jan Fabry To bardzo fajny sposób, aby naprawić swoją odpowiedź. :)
fuxia
3

Proste, has_post_format () zwraca wartość true / false (Boolean), która jest użyteczna w instrukcjach IF, natomiast get_post_format () zwraca format postu, jeśli taki istnieje, i prawdopodobnie NULL lub false, jeśli go nie ma. Używanie wartości boolowskich jest dobrym, czystym sposobem na upewnienie się, że twoje warunki zawsze zachowują się tak, jak się spodziewałeś, a funkcja has_post_format () pozwala na dość łatwe krótkie warunki:

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

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

Ponadto jest to zgodne z innymi istniejącymi funkcjami WordPress. Chociaż twoja opcja B załatwia sprawę, wymaga nieco bardziej specjalistycznej wiedzy niż być może zna się nieco ponadprzeciętny użytkownik WordPress.

Drew Gourley
źródło
Przypomina mi get_adjacent_posti tak next_post_linkdalej.
kaiser