Ich habe einen Code, den ich in eine Funktion verwandeln möchte. Es funktioniert großartig, bis ich es in die folgende Funktion einpacke:
$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 Funktion sieht ungefähr so aus:
function grab_ids_in_category($cat) {
//stuff from above here
return $matching_category_ids;
}
Was mache ich falsch?
Ganz einfach, Sie adressieren $post
außerhalb des Kontexts.
Wenn Sie eine Standard-WordPress-Schleife ausführen, lädt WP eine globale $post
-Variable mit den Ergebnissen der aktuellen Abfrage. Dies schließt die ID, den Titel, den Inhalt, das Post-Meta usw. ein. Die Schleifenfunktionen referenzieren diese globale Variable, um Ihnen tatsächlich Daten zu liefern.
Nehmen Sie die reguläre Funktion get_the_ID()
zum Beispiel:
function get_the_ID() {
global $post;
return $post->ID;
}
Ihr Code funktioniert auch außerhalb einer Funktion einwandfrei, da Sie im Code darüber wahrscheinlich die Variable $post
global
anpassen. Ihr direkter Verweis auf $post->ID
funktioniert also.
Wenn Sie diesen Code jedoch in eine Funktion einschließen, wird nicht $post
als global bezeichnet, sodass $post->ID
nichts zurückgibt, da local $post
undefiniert ist.
Verwenden Sie die reguläre Schleifenfunktion get_the_ID()
, anstatt $post->ID
direkt zu referenzieren:
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 Funktion 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');