has_post_format () vs. get_post_format ()


10

Sono appena entrato nel concetto di formati di post e mi chiedevo perché ci sono due funzioni su 3 dal formato di post "API" che offrono assolutamente le stesse funzionalità. Considera i seguenti due concetti (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;

Qualcuno potrebbe spiegarmi perché ci sono queste due funzioni invece solo ex. get_post_format? Se potessi offrirmi alcuni esempi di situazioni in cui l'una non è in grado di fare qualcosa che l'altra funzione può fare, sarei felice e contento.

Risposte:


12

modificare

has_post_format()richiede una stringa, $formatcome primo parametro; ciò significa che può essere utilizzato solo per verificare tipi espliciti di post-formato:

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

Per determinare se un post ha un formato di post, utilizzare get_post_format(), che restituirà falsese al post corrente non è assegnato un formato di post:

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

Tieni presente che "standard" non è un vero formato post, ma piuttosto un termine segnaposto per post a cui non è assegnato un formato post. Internamente, WordPress ritorna falsepiuttosto che post-format-standard, quindi, per cercare il tipo di post-formato "standard", dovresti semplicemente usare if ( false == get_post_format() ).

Originale

has_post_format() restituisce un valore BOOLEANO, utile per i condizionali, ad esempio:

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

o

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

get_post_format()restituisce il valore stringa del tipo di formato post corrente, che è utile in diversi modi. Uno dei più potenti è quello di chiamare diversi file di parti di modello in base al formato postale, ad esempio:

get_template_part( 'entry', get_post_format() )

Che includerà, ad esempio "entry-Hole.php" per un formato da parte, o "entry.php" per un formato standard.


La get_template_partè davvero intelligente!
Kaiser

Bennet - completo dimenticato di contrassegnare la tua A come soluzione. A proposito: Tutti gli As furono votati :)
Kaiser

1
if ( ! has_post_format() ) {}restituisce un avviso (almeno a partire da 3.5-RC1) poiché manca il primo argomento (obbligatorio). codex.wordpress.org/Function_Reference/has_post_format
glueckpress

4

La parte seguente non è corretta, ho creato un ticket per richiedere questo miglioramento.

has_post_format()è più flessibile perché si basa su has_term(), su cui si basa is_object_in_term(). Ciò significa che puoi passare una serie di formati di post e verrà restituito truese i post hanno uno di questi formati.

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

Il biglietto di specifica originale ha già menzionato entrambi get_post_format()e has_post_format(), forse perché si basa sul sistema di tassonomia che ha anche entrambe le funzioni?


Oh, sicuramente, questo estende ulteriormente ciò che puoi fare qui permettendoti di controllare formati specifici per ottenere la tua risposta vera / falsa.
Ha disegnato Gourley l'

Mi fa pensare se avrebbe senso usare semplicemente la is_object_in_term()funzione.
Kaiser

1
@Jan Fabry has_post_format()prevede una stringa come primo parametro. Un array fallirà.
fuxia

1
@toscho: Accidenti, sapevo che avrei dovuto testarlo invece di dare un'occhiata al codice. Quindi non è coerente con altre has_*funzioni: ho creato un ticket per questo.
Jan Fabry,

2
@Jan Fabry È un modo fantastico per risolvere la tua risposta. :)
fuxia

3

Semplice, has_post_format () restituisce un valore vero / falso (booleano) che è utile nelle istruzioni IF, mentre get_post_format () restituisce il formato post, se presente, e probabilmente NULL o false se non è presente. L'uso di valori booleani è un buon modo chiaro per assicurarsi che le tue condizioni si comportino sempre come ti aspettavi e che la funzione has_post_format () consenta piacevoli condizioni brevi:

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

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

Inoltre, questo è in linea con altre funzionalità di WordPress esistenti. Mentre la tua opzione B fa le cose, richiede una conoscenza un po 'più specializzata di quella che l'utente WordPress leggermente al di sopra della media ha familiarità.


Mi ricorda l' get_adjacent_poste next_post_linkroba.
Kaiser
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.