WP_Query in functions.php überschreibt globales $ post-Objekt, sogar mit wp_reset_query ()

Ich habe eine function geschrieben, die alle Posts, die Entwürfe sind, ergreift und sie als Dropdown in meiner Symbolleiste platziert, um den einfachen Zugriff zu vervollständigen. Das funktioniert gut.

Das Problem ist, dass es mit meinem globalen $ post-Objekt zu verwirren scheint, speziell wenn es in meinem Post / Page-Editor aufgerufen wird.

Also, wenn ich in meinem Post-Editor bin: http://example.com/wp-admin/post.php?post=147&action=edit

147 ist der Beitrag, den ich bearbeiten möchte. Aber anstatt den Post zu zeigen, der 147 entspricht, wird der letzte Entwurf in der Schleife angezeigt, obwohl ich die Abfragevariable mit wp_reset_query () zurücksetze.

Vielen Dank!

Hier ist meine function:

// Get Company Drafts add_action( 'admin_bar_menu', 'add_nodes_and_groups_to_toolbar', 1000 ); function add_nodes_and_groups_to_toolbar( $wp_admin_bar ) { $user_id = bp_loggedin_user_id(); $draft_query = new WP_Query(array( 'connected_type' => 'companies_to_users', 'connected_items' => $user_id, 'nopaging' => true, 'post_status' => 'draft' )); if ($draft_query->have_posts()) { // Add 'Drafts' to the Toolbar $args = array( 'id' => 'drafts', 'title' => 'Drafts', ); $wp_admin_bar->add_node( $args ); // Add the category 'Companies' as the sub-menu of Drafts $args = array( 'id' => 'drafts_company', 'title' => 'Companies', 'parent' => 'drafts' ); $wp_admin_bar->add_node( $args ); while($draft_query->have_posts()) : $draft_query->the_post(); // Add the post title as the sub-menu of the category sub-menu $args = array( 'id' => $post->ID, 'parent' => 'drafts_company', 'title' => get_the_title(), 'href' => apply_filters('gform_update_post/edit_url', $post->ID, home_url('/edit-company/')) ); $wp_admin_bar->add_node( $args ); endwhile; } wp_reset_query(); } 

Solutions Collecting From Web of "WP_Query in functions.php überschreibt globales $ post-Objekt, sogar mit wp_reset_query ()"

Das Problem ist, dass wp_reset_postdata versucht $post aus dem Haupt $wp_query , aber in post.php in admin wird $post nicht von $wp_query , so dass wp_reset_postdata nicht wiederherstellen kann. Die Lösung besteht darin, get_posts und foreach anstelle von WP_Query und der Schleife zu verwenden.