WP_Query in functions.php

Ich habe einen Code, den ich in eine function umwandeln möchte. Es funktioniert gut, bis ich es in die genannte function verpacken:

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

Die function sieht ungefähr so ​​aus:

 function grab_ids_in_category($cat) { //stuff from above here return $matching_category_ids; } 

Was mache ich falsch?

Solutions Collecting From Web of "WP_Query in functions.php"

Ganz einfach: Sie sprechen $post außerhalb des Kontexts an.

Wenn Sie eine Standard-WordPress-Schleife ausführen, lädt WP eine globale $post Variable mit den Ergebnissen der aktuellen Abfrage. Dazu gehören ID, Titel, Inhalt, Post-Meta usw. Die Schleifenfunktionen verweisen auf diese globale Variable, um Ihnen tatsächlich Daten zu geben.

Nehmen Sie die reguläre function get_the_ID() zum Beispiel:

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

Ihr Code wird außerhalb einer function gut funktionieren, weil Sie irgendwo im Code darüber die Variable $post globalisieren. So funktioniert Ihr direkter Bezug zu $post->ID .

Aber wenn Sie diesen Code in eine function einfügen, verweisen Sie $post als global, so dass $post->ID nichts zurückgibt, weil der lokale $post definiert ist.

Anstatt $post->ID direkt zu referenzieren, verwenden Sie die reguläre Schleifenfunktion get_the_ID() :

 while ( $cat_query->have_posts() ) : $cat_query->the_post(); array_post( $matching_category_ids, get_the_ID() ); endwhile; 

Sie müssen die globale Variable $ post wie folgt in die function einfügen:

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