Metabox Dropdown mit Beitragstitel von einem anderen benutzerdefinierten Beitragstyp aus füllen (Probleme mit wp_reset / global $ post)

Ich habe einen benutzerdefinierten Post-Typ, und dort habe ich eine Metabox mit einem Dropdown-Menü. Die Dropdown-Liste enthält die Titel von Posts aus einem anderen benutzerdefinierten Post-Typ.

Mein Metabox-System funktioniert. Ich habe versucht, die Optionen hart zu codieren und sie richtig zu speichern. Ich kann auch die Daten aus dem benutzerdefinierten Post-Typ abrufen, um das Dropdown-Menü zu füllen.

Das Problem liegt im Speichern / Laden von Daten.

Ich habe wp_query und get_posts mit ihren entsprechenden Resets ausprobiert, aber wann immer ich versuche, die Daten einzuziehen, wird das Dropdown nicht aktualisiert und der Permalink wird auf den zuletzt gezogenen benutzerdefinierten Posttyp geändert.

Ich muss nur wissen, wie man die Daten korrekt einliest oder die Schleife richtig zurücksetzt.

/* Create role metabox */ function create_roles_metabox() { global $post; add_meta_box( 'roles_metabox', 'Role Area & Level', 'show_roles_metabox', 'role', 'side', 'high' ); } /* Show roles metabox */ function show_roles_metabox() { global $post; wp_nonce_field(basename(__FILE__), 'role_nonce'); $pro_areas = array( 'One', 'Two', 'Three' ); /* $args = array( 'post_type' => 'proarea', 'publish_status' => 'publish', 'posts_per_page' => -1, 'order' => 'ASC' ); $the_query = new WP_Query($args); if($the_query->have_posts()) { echo '
    '; while ( $the_query->have_posts()) { $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; } echo '
'; } else { } */ /* $mcpt_query = array(); $the_query = get_posts('post_type=proarea'); foreach ( $the_query as $post ) : setup_postdata( $post ); $mcpt_query[] = array( 'title' => get_the_title($post->ID) ); endforeach; wp_reset_postdata(); print_r($mcpt_query); */ echo ''; echo ''; foreach($pro_areas as $pro_area) { if($pro_area == get_post_meta($post->ID, 'pro_area', true)) echo ''. $pro_area .''; else echo ''. $pro_area .''; } echo ''; } /* Save roles metabox */ function save_roles_metabox($post_id, $post) { if(!isset($_POST['role_nonce']) || !wp_verify_nonce($_POST['role_nonce'], basename(__FILE__))) return $post->ID; if(!current_user_can('edit_post', $post->ID)) return $post->ID; if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post->ID; if(isset($_POST['pro_area'])) update_post_meta($post_id, 'pro_area', $_POST['pro_area']); } add_action('add_meta_boxes', 'create_roles_metabox'); add_action('save_post', 'save_roles_metabox', 1, 2);

Solutions Collecting From Web of "Metabox Dropdown mit Beitragstitel von einem anderen benutzerdefinierten Beitragstyp aus füllen (Probleme mit wp_reset / global $ post)"

Okay, ich habe es sortiert.

Ich habe mit etwas Ähnlichem hier einen Eintrag gefunden; WordPress wurde nicht in die Hauptschleife zurückgesetzt.

Also mein Code ist jetzt:

  /* Show roles metabox */ function show_roles_metabox() { global $post; $tempPost = $post; wp_nonce_field(basename(__FILE__), 'role_nonce'); $pro_areas = array( 'One', 'Two', 'Three' ); $args = array( 'post_type' => 'proarea', 'publish_status' => 'publish', 'posts_per_page' => -1, 'order' => 'ASC' ); $the_query = new WP_Query($args); if($the_query->have_posts()) { echo '
    '; while ( $the_query->have_posts()) { $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; } echo '
'; } else { } wp_reset_postdata(); /* $mcpt_query = array(); $the_query = get_posts('post_type=proarea'); foreach ( $the_query as $post ) : setup_postdata( $post ); $mcpt_query[] = array( 'title' => get_the_title($post->ID) ); endforeach; wp_reset_query(); print_r($mcpt_query); */ $post = $tempPost; echo ''; echo ''; }

Was ich getan habe, war global $ post, und auch $ tempPost gleich gesetzt. Nach dem “Reset” habe ich $ post mit dem, was in $ tempPost gespeichert wurde, aktualisiert. Der Permalink bleibt gleich, ich ändere die Optionen und alle Bereiche werden angezeigt.

Hoffentlich sollte dies ermöglichen, dass die Bereiche geladen und gespeichert werden.