J'ai du code que je veux transformer en une fonction. Cela fonctionne très bien jusqu'à ce que je l'enveloppe dans ladite fonction:
$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 fonction ressemble à ceci:
function grab_ids_in_category($cat) {
//stuff from above here
return $matching_category_ids;
}
Qu'est-ce que je fais mal?
Simple, vous adressez $post
hors contexte.
Lorsque vous exécutez une boucle WordPress standard, WP charge une variable globale $post
avec les résultats de la requête en cours. Cela inclut l’ID, le titre, le contenu, les méta-publications, etc. Les fonctions de boucle référenceront cette variable globale pour vous fournir des données.
Prenons la fonction régulière get_the_ID()
par exemple:
function get_the_ID() {
global $post;
return $post->ID;
}
Votre code fonctionnera bien en dehors d'une fonction car, quelque part dans le code qui le précède, vous êtes probablement global
isant la variable $post
. Donc, votre référence directe à $post->ID
fonctionne.
Mais lorsque vous intégrez ce code dans une fonction, vous n'êtes pas référençant $post
sous forme globale, donc $post->ID
ne renverra rien car le local $post
n'est pas défini.
Au lieu de référencer directement $post->ID
, utilisez la fonction de boucle régulière get_the_ID()
:
while ( $cat_query->have_posts() ) : $cat_query->the_post();
array_post( $matching_category_ids, get_the_ID() );
endwhile;
Vous devez ajouter la variable globale $ post dans la fonction comme ceci:
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;
}
// echo the Query and pass a category name
echo grab_ids_in_category('category_name');