web-dev-qa-db-fra.com

Remplir la liste déroulante d'un type de publication personnalisé à l'intérieur d'un autre type de publication personnalisée

[Résolu -> voir le dernier commentaire de cette question]

Dans le message personnalisé, tapez CPT_A. Je sauvegarde les prénoms et le nom de famille via un champ de formulaire de métabox personnalisé (ils ne sont pas des taxonomies):

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

Dans la base de données, cela ressemble à ceci:

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

Dans le message personnalisé, tapez CPT_B J'essaie de créer une liste déroulante qui est remplie par CPT_A => prénom et nom.

Comment puis-je parcourir le prénom et le nom de famille?

[Résolu] Avec le formulaire d’aide de Gareth Gillman, j’ai supprimé la boucle foreach, déplacé le <option> dans la boucle while et changé get_the_id () en $ query1-> post-> ID.

Voici la solution de travail. S'il y a une manière plus éloquente s'il vous plaît commenter.

<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

Vous devez interroger la base de données à l'aide de wp_query pour obtenir toutes les publications du CPT, enregistrer le contenu de la métabox dans un tableau, puis imprimer le tableau.

Non testé mais devrait fonctionner (j'espère):

<?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