web-dev-qa-db-de.com

Füllen Sie die Dropdown-Liste eines benutzerdefinierten Beitragstyps in einen anderen benutzerdefinierten Beitragstyp aus

[Gelöst -> siehe letzten Kommentar in dieser Frage]

Im benutzerdefinierten Beitragstyp CPT_A speichere ich Vor- und Nachnamen über ein benutzerdefiniertes Metabox-Formularfeld (es handelt sich nicht um Taxonomien):

update_post_meta( $post_id, 'first_name', esc_attr( $_POST['first_name'] ) )
update_post_meta( $post_id, 'last_name', esc_attr( $_POST['last_name'] ) )

In der Datenbank sieht es so aus:

post_id, meta_key, meta_value
186, first_name, John
186, last_name, Doe
323, first_name, Bill
323, last_name, Jones

Im benutzerdefinierten Beitragstyp CPT_B versuche ich, ein Dropdown-Menü zu erstellen, das mit CPT_A => Vorname und Nachname gefüllt ist.

Wie durchlaufe ich Vor- und Nachnamen?

[Gelöst] Mit Hilfe von Gareth Gillmans Beitrag habe ich die foreach-Schleife entfernt, den <option> in die while-Schleife verschoben und get_the_id () in $ query1-> post-> ID geändert.

Hier ist die funktionierende Lösung. Wenn es einen beredteren Weg gibt, kommentieren Sie ihn bitte.

<select name="mailing_name" id="mailing_name">

<?php 

$select_array = array();

$args = array (
    'post_type' => 'fooBar',
);

$query1 = new WP_Query( $args );

while ( $query1->have_posts() ) {

    $query1->the_post(); 

    $first_name = get_post_meta( $query1->post->ID, 'first_name', true);
    $last_name = get_post_meta( $query1->post->ID, 'last_name', true);

    echo '<option value="">' . $first_name . '&nbsp;' . $last_name . '</option>';

}

wp_reset_postdata();
?>

</select>
1
Jason

Sie müssen die Datenbank mit wp_query abfragen, um alle Posts vom CPT zu erhalten, den Metabox-Inhalt in einem Array speichern und das Array dann drucken.

Nicht getestet, sollte aber funktionieren (hoffe ich):

<?php
$select_array = array();
$args = array (
 'post_type' => 'your_cpt',
);
$query1 = new WP_Query( $args );
while ( $query1->have_posts() ) {
 $query1->the_post();
 $select_array[firstname] = get_post_meta(get_the_id(), 'the_meta_key', true);
$select_array[lastname] = get_post_meta(get_the_id(), 'the_meta_key', true);
}
wp_reset_postdata();
?>

<select name="mailing_name" id="mailing_name">
 <?php
 foreach ($select_array as $option) {
  echo '<option value="">'.$option[firstname].'&nbsp;'.$option[lastname].'</option>';
 }
 ?>
</select>
1
Gareth Gillman