web-dev-qa-db-ja.com

あるカスタム投稿タイプから別のカスタム投稿タイプへのドロップダウンの作成

[解決 - >この質問の最後のコメントを見る]

カスタム投稿タイプ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 . '&nbsp;' . $last_name . '</option>';

}

wp_reset_postdata();
?>

</select>
1
Jason

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].'&nbsp;'.$option[lastname].'</option>';
 }
 ?>
</select>
1
Gareth Gillman