WP_Query în functions.php
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?
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;

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');
