WP_Query în functions.php

25 iun. 2012, 20:53:35
Vizualizări: 19.9K
Voturi: 4

Am un cod pe care vreau să-l transform într-o funcție. Funcționează perfect până când îl includ în funcția respectivă:

    $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;

Funcția arată cam așa:

function grab_ids_in_category($cat) {
    //codul de mai sus aici
    return $matching_category_ids;
}

Ce fac greșit?

0
Toate răspunsurile la întrebare 2
0

Simplu, faci referire la $post în afara contextului.

Când rulezi o buclă standard WordPress, WP va încărca o variabilă globală $post cu rezultatele interogării curente. Aceasta include ID-ul, titlul, conținutul, meta datele postării etc. Funcțiile buclei se vor referi la această variabilă globală pentru a vă furniza datele.

De exemplu, funcția obișnuită get_the_ID():

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

Codul tău va funcționa bine în afara unei funcții pentru că, undeva în codul de mai sus, probabil că faci variabila $post globală. Deci referința directă la $post->ID funcționează.

Dar când încapsulezi acest cod într-o funcție, tu nu faci referire la $post ca global, așa că $post->ID nu va returna nimic deoarece variabila locală $post este nedefinită.

În loc să faci referire directă la $post->ID, folosește funcția obișnuită a buclei get_the_ID():

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

Trebuie să adaugi variabila globală $post în funcție astfel:

function grab_ids_in_category($cat) {

    global $post;

    $args = array(
        'posts_per_page'    =>  -1, // număr nelimitat de postări
        'post_type'         =>  'asset', // tipul postării
        'category_name'     =>  $cat // numele categoriei
    );

    $cat_query = new WP_Query( $args ); // inițializare interogare WP

    $matching_category_ids = array(); // array pentru ID-uri

    while ( $cat_query->have_posts() ) : $cat_query->the_post();
        array_push($matching_category_ids, $post->ID); // adăugare ID în array
    endwhile;

    return $matching_category_ids; // returnare array cu ID-uri

}

// afișează rezultatul interogării pentru o categorie specifică
echo grab_ids_in_category('nume_categorie');
25 iun. 2012 21:15:22