[解決 - >この質問の最後のコメントを見る]
カスタム投稿タイプCPT_Aでは、カスタムメタボックスフォームフィールドを使用してfirst_nameとlast_nameを保存しています(これらは分類法ではありません)。
update_post_meta( $post_id, 'first_name', esc_attr( $_POST['first_name'] ) )
update_post_meta( $post_id, 'last_name', esc_attr( $_POST['last_name'] ) )
データベースでは次のようになります。
post_id, meta_key, meta_value
186, first_name, John
186, last_name, Doe
323, first_name, Bill
323, last_name, Jones
カスタム投稿タイプCPT_Bでは、CPT_A => first_nameとlast_nameで設定されたドロップダウンを作成しようとしています。
姓名をどのようにループしますか?
[解決] Gareth Gillmanの投稿フォームを使ってforeachループを削除し、<option>
をwhileループに移動し、get_the_id()を$ query1-> post-> IDに変更した。
これが実用的な解決策です。もっと雄弁な方法があればコメントしてください。
<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 . ' ' . $last_name . '</option>';
}
wp_reset_postdata();
?>
</select>
CPTからすべての投稿を取得し、メタボックスの内容を配列に保存してから配列を印刷するには、wp_queryを使用してデータベースにクエリする必要があります。
テストされていませんが、動作するはずです(私は願っています):
<?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].' '.$option[lastname].'</option>';
}
?>
</select>