global $ post innerhalb der Plugin-Abfrage vermasselt jede neue Post-Seite in wp-admin

Ich habe ein sehr seltsames Problem, das ich versuche zu beheben:

Ich habe eine Abfrage (um ein Array zu erstellen), die ich auf einem benutzerdefinierten Post-Typ in meinem Plugin ausführen. Es sieht aus wie das:

function makePointerQuery(){ //global $post; $pqargs = array( 'post_type' => 'sbap_pointer', 'posts_per_page' => -1 ); $pointer_query = array(); $pp_query = get_posts($pqargs); if ($pp_query) : foreach ( $pp_query as $post ) : setup_postdata( $post ); $pointer_query[] = array( 'id' => get_post_meta($post->ID, '_sbap_pointerid_text', true ), 'screen' => get_post_meta($post->ID, '_sbap_screen_text', true ), 'title' => get_the_title($post->ID), 'content' => get_the_content($post->ID) ); endforeach; endif; wp_reset_postdata(); return $pointer_query; } 

Wenn ich global $ post weglasse, scheint mein Plugin gut zu funktionieren, aber ich bekomme folgende PHP Notice (mit Debugging):

 Notice: Trying to get property of non-object in /wp-includes/post-template.php on line 289 

ABER wenn ich globale $ Post einschließe, während diese Nachricht weggeht, passiert etwas sehr Seltsames. Jede (“Neue hinzufügen”) neue Post-Seite (“post-new.php” in Beiträgen, Seiten, meinem benutzerdefinierten Post-Typ, usw.) zieht hoch und füllt die Daten von meinem ersten benutzerdefinierten Beitrag aus (dh der Titel, Inhalt, Slug werden alle mit den Daten dieses Posts ausgefüllt, anstatt mit den leeren Feldern, wie es für einen neuen Post normal wäre).

Ich bin ratlos, wie ich diese Fehleranzeige beseitigen kann, während meine Plugin-function weiterhin wie erwartet funktioniert (ohne jeden neuen Post im Admin zu verpfuschen).

Irgendwelche Ideen? Danke im Voraus!

Solutions Collecting From Web of "global $ post innerhalb der Plugin-Abfrage vermasselt jede neue Post-Seite in wp-admin"

Sie haben zwei Probleme in Ihrem Code.

  1. Sie verwenden $post als Iterationsvariable, die am besten vermieden wird
  2. Sie verwenden setuppostdata das den globalen $post setuppostdata ändert, ohne dass Sie eine function verwenden, die sie tatsächlich benötigt

Ihre Schleife sollte wie folgt aussehen

 foreach ( $pp_query as $p) : $pointer_query[] = array( 'id' => get_post_meta($p->ID, '_sbap_pointerid_text', true ), 'screen' => get_post_meta($p->ID, '_sbap_screen_text', true ), 'title' => get_the_title($p->ID), 'content' => get_the_content($p->ID) ); endforeach; endif; 

dann sind auch die reset_post_data nicht reset_post_data