Utilizzo di WP_Query in functions.php

25 giu 2012, 20:53:35
Visualizzazioni: 19.9K
Voti: 4

Ho del codice che voglio trasformare in una funzione. Funziona perfettamente finché non lo inserisco nella funzione:

    $args = array(
        'posts_per_page'    =>  -1,
        'post_type'         =>  'asset',
        'category_name'     =>  $cat
    );
    $cat_query = new WP_Query( $args );
    $matching_category_ids = array();       
    while ( $cat_query->have_posts() ) : $cat_query->the_post();
        array_push($matching_category_ids, $post->ID);
    endwhile;

La funzione appare più o meno così:

function grab_ids_in_category($cat) {
    //codice di cui sopra qui
    return $matching_category_ids;
}

Cosa sto sbagliando?

0
Tutte le risposte alla domanda 2
0

Semplice, stai facendo riferimento a $post fuori dal contesto.

Quando esegui un loop standard di WordPress, WP caricherà una variabile globale $post con i risultati della query corrente. Questo include l'ID, il titolo, il contenuto, i meta dei post, ecc. Le funzioni del loop faranno riferimento a questa variabile globale per fornirti i dati.

Prendiamo ad esempio la funzione regolare get_the_ID():

function get_the_ID() {
    global $post;
    return $post->ID;
}

Il tuo codice funzionerà bene al di fuori di una funzione perché, da qualche parte nel codice sopra, probabilmente stai rendendo globale la variabile $post. Quindi il tuo riferimento diretto a $post->ID funziona.

Ma quando racchiudi questo codice all'interno di una funzione, non stai facendo riferimento a $post come globale, quindi $post->ID non restituirà nulla perché la variabile locale $post non è definita.

Invece di fare riferimento direttamente a $post->ID, usa la normale funzione del loop get_the_ID():

while ( $cat_query->have_posts() ) : $cat_query->the_post();
    array_post( $matching_category_ids, get_the_ID() );
endwhile;
25 giu 2012 21:11:19
0

Devi aggiungere la variabile globale $post all'interno della funzione in questo modo:

function grab_ids_in_category($cat) {

    global $post;

    $args = array(
        'posts_per_page'    =>  -1,
        'post_type'         =>  'asset',
        'category_name'     =>  $cat
    );

    $cat_query = new WP_Query( $args );

    $matching_category_ids = array();

    while ( $cat_query->have_posts() ) : $cat_query->the_post();
        array_push($matching_category_ids, $post->ID);
    endwhile;

    return $matching_category_ids;

}

// mostra la Query e passa il nome di una categoria 
echo grab_ids_in_category('nome_categoria');
25 giu 2012 21:15:22