web-dev-qa-db-ja.com

投稿参照用に選択したカスタムフィールドのドロップダウンの値を格納する方法

私はお互いに投稿を参照しようとしています。編集者は現在の投稿を他の投稿とリンクさせるために特定の投稿のタイトルのカスタムフィールド選択リストを持つべきです。私はかなり遠くまで来たと思います。選択リストが正しく表示されます。すべてのタイトルがあります。

さて、参照した投稿のIDを保存しなければならないところに行き詰まっています。

選択したオプションの値を取得して保存し、デフォルト値にする方法を教えてください。フォーム関数内にすべてをラップする必要がありますか?

これは私がこれまでに持っているものです:

add_action("admin_init", "admin_init");
add_action('save_post', 'save_reference_id');  
/*** add_meta_box ***/
function admin_init(){
    // adding a custom field to post type 'case'
    add_meta_box("refInfo-meta", "Reference", "meta_options", "case", "side", "high");
}  
/*** callback ***/
function meta_options(){
  ?>
    <form action="<?php bloginfo('url'); ?>" method="get">
      <select name="page_id" id="page_id">

      <?php
      global $post;
      // getting all child pages of ID 21
      $args = array( 'numberposts' => -1, 'post_type' => 'page', 'post_parent' => 21);
      $posts = get_posts($args);

      foreach( $posts as $post ) : setup_postdata($post); ?>
        <option value="<?php echo $post->ID; ?>"><?php the_title(); ?></option>
      <?php endforeach; ?>

      </select>
    </form>

  <?php
}  
/*** save_post ***/
function save_reference_id(){
  // big question mark
}
3
leymannx

selected() はデフォルト値を設定するための大きな助けでした。私がこの素晴らしいメタボックスチュートリアルで見つけた残りの部分: http://code.tutsplus.com/tutorials/how-to-create-custom-wordpress-writemeta-box--wp-20336 テキスト入力の例、チェックボックスとドロップダウン。また、 カスタムメタボックスを追加するとカスタム投稿タイプのスラグが正しく表示されない 現在の投稿オブジェクトを正しく処理してオプションオブジェクトと混同しないようにする方法を説明しました。

/*** callback ***/
function meta_options(){
  global $post;
  // storing the global post object so it doesn't get mixed up with the options
  $post_old = $post

  $custom = get_post_custom($post->ID);
  if (isset($custom["reference_id"][0])) {
    $reference_id = $custom["reference_id"][0];
  } else {
    $reference_id = '0';
  }
  ?>
    <form action="<?php bloginfo('url'); ?>" method="get">
      <select name="ref_id" id="ref_id">
        <option value="0" <?php selected($reference_id, '0'); ?>>- choose client -</option>
      <?php
      global $post;
      $args = array(
        'numberposts' => -1,
        'post_type' => 'page',
        'post_parent' => 21
        );
      $posts = get_posts($args);
      foreach( $posts as $post ) : setup_postdata($post); ?>
        <option value="<?php echo $post->ID; ?>" <?php selected($reference_id, $post->ID); ?>><?php the_title(); ?></option>
      <?php endforeach; ?>
      </select>
    </form>
  <?php
  // restoring the global post object
  $post = $post_old;
  setup_postdata( $post );
}

/*** save_post ***/
function save_reference_id(){
  global $post;
  if (isset($_POST["ref_id"])) {
    update_post_meta($post->ID, "reference_id", $_POST["ref_id"]);
  }
}
3
leymannx
add_action("admin_init", "admin_init");
add_action('save_post', 'save_reference_id');  
/*** add_meta_box ***/
function admin_init(){
    // adding a custom field to post type 'case'
    add_meta_box("refInfo-meta", "Reference", "meta_options", "case", "side", "high");
}  
/*** callback ***/
function meta_options(){
  ?>
  <select name="page_id" id="page_id">
<?php
  global $post;
  // getting all child pages of ID 21
  $args = array( 'numberposts' => -1, 'post_type' => 'page', 'post_parent' => 21);
  $posts = get_posts($args);

  foreach( $posts as $post ) : setup_postdata($post); ?>
    <option value="<?php echo $post->ID; ?>"><?php the_title(); ?></option>
  <?php endforeach; ?>
  </select>    
  <?php
}  
/*** save_post ***/
function save_reference_id($post_id){
    update_post_meta($post_id, "[meta_key]", $_POST['page_id']);
}
1
Mitul