Warum stören meine Abfragen die globale Post-Variable?

Ich entwickle ein Plugin. Es gibt zwei CPTs: Kategorie und Gericht. Ich versuche, die Werte für die Felder zu erhalten, indem get_post_meta($post->ID, 'dish_price', true) Das Problem ist, dass jede function, die ich verwende, um die ID des Gerichtes zu erhalten, das bearbeitet wird, zurückkehrt die ID der letzten Kategorie, die in meiner Kategorie-Dropdown-Liste abgerufen wurde. Was mache ich falsch?

 function meta_boxes(){ /*Category meta boxes */ remove_meta_box('commentstatusdiv', 'category', 'normal'); remove_meta_box('commentsdiv', 'category', 'normal'); remove_meta_box( 'postexcerpt', 'category', 'core' ); add_meta_box( 'description', 'Description', 'category_description_meta_box', 'category' ); /* Dish meta boxes */ remove_meta_box('commentstatusdiv', 'dish', 'normal'); remove_meta_box('commentsdiv', 'dish', 'normal'); remove_meta_box( 'postexcerpt', 'dish', 'core' ); add_meta_box( 'parent_id', 'Category', 'dish_category_metabox', 'dish' ); add_meta_box( 'description', 'Description', 'dish_description_meta_box', 'dish' ); add_meta_box('dish_price', 'Price', 'dish_price_meta_box', 'dish'); } function category_description_meta_box(){ global $post; //var_dump($post) echo ''; echo ''; } function dish_description_meta_box(){ global $post; //var_dump($post) echo ''; echo ''; } function dish_price_meta_box(){ global $post; echo '$ID, 'dish_price', true).'">'; } function dish_category_metabox() { global $post; $out = ''.PHP_EOL; $args = array( 'post_type' => 'category', 'order' => 'ASC' ); $the_query = new WP_Query($args); if ($the_query->have_posts()) { while ($the_query->have_posts()) { $the_query->the_post(); $out .= 'ID, 'parent_id', true) == get_the_ID()){ $out .= ' SELECTED'; } $out .= '>'.get_the_title().''.PHP_EOL; } } $out .= ''.PHP_EOL; echo $out; } add_action('add_meta_boxes', 'meta_boxes'); 

Solutions Collecting From Web of "Warum stören meine Abfragen die globale Post-Variable?"

$the_query->the_post(); bevölkert den globalen $post mit jedem Post in dieser Schleife. Bei Front-End-Abfragen würden Sie wp_reset_postdata() normalerweise nach dem Ausführen einer sekundären Abfrage-Schleife aufrufen, was jedoch auf der Admin-Seite nicht funktioniert.

Verwenden Sie get_posts anstelle von WP_Query und durchlaufen Sie die Ergebnisse mit einer foreach Schleife.

 $my_posts = get_posts( $args ); if( !empty( $my_posts ) ){ foreach( $my_posts as $my_post ){ echo $my_post->ID; echo get_the_title( $my_post ); } }