2017-12-28 24 views
0

カスタムメタボックスの選択オプションを保存しようとして壁に頭をぶつけていました。ドロップダウンに複数のオプションがあるので、値を保存するために実際に何をターゲットにしているのか分かりにくいです。私はselect name="XXX"をターゲットにしようとしますが、運はまだありません。どんな助けでも大歓迎です。ここでWordPressカスタムメタボックスで選択オプションを保存する方法

は、選択オプションドロップダウンを表示する私のコードです:

<?php 
    $accessory_product_args = [ 
     'posts_per_page' => -1, 
      'tax_query' => [ 
       'relation' => 'AND', 
       [ 
        'taxonomy' => 'product_cat', 
        'field' => 'slug', 
        'terms' => 'accessories' 
       ], 
      ], 
     'post_type' => 'product', 
     'orderby' => 'title', 
    ]; 
    $accessory_product = new WP_Query($accessory_product_args); ?> 

    <select name="_accessories_product_one" id="_accessories_product_one" class="widefat"> 
     <?php while ($accessory_product->have_posts()) : $accessory_product->the_post(); 
      $title_one = get_the_title(); 
      $postid_one = get_the_ID(); ?> 
      <option value="<?=$postid_one?>" <?php selected('_accessories_product_one[select_field_0]', $postid_one); ?>> 
       <?=$title_one?> 
      </option> 
     <?php endwhile; ?> 
    </select> 

    <?php 
//this below is used for testing to see if i have saved the value or not: 
    $dropdown_option = get_option('_accessories_product_one'); // Array 
    $dropdown_value = $dropdown_option ['select_field_0']; // Option value 

    var_dump($dropdown_option); 
    var_dump($dropdown_value); 
    ?> 

このコードは節約です:

<?php 
if (isset($_POST['_accessories_product_one']) { 
    update_post_meta($post_id, '_accessories_product_one', $_POST['_accessories_product_one']); 
    } ?> 

任意の助けいただければ幸いです。

EDIT: 私はこれをwoocommerceプロダクト画面で使用しています - ページ編集、ポスト編集、プラグイン編集画面ではありません。ここで

は、私が使用しています完全なコードのより詳細なペーストです:

function custom_product_basic_load() { 

    add_action('add_meta_boxes_product' , 'custom_product_basic_add_meta_boxes_product'); 
    add_meta_box('custom_product_basic_metabox' , __('Product Layout') , 'custom_product_basic_metabox' , 'product' , 'normal' , 'high'); 
    add_action('save_post' , 'custom_product_basic_save_post' , 10 , 3); 

} 
add_action('load-post.php' , 'custom_product_basic_load'); 
add_action('load-post-new.php' , 'custom_product_basic_load'); 

function custom_product_basic_metabox($post) {?> 

     <input type="hidden" name="product_type" value="simple" /> 

     <?php 
     $accessory_product_args = [ 
      'posts_per_page' => -1, 
       'tax_query' => [ 
        'relation' => 'AND', 
        [ 
         'taxonomy' => 'product_cat', 
         'field' => 'slug', 
         'terms' => 'accessories' 
        ], 
       ], 
      'post_type' => 'product', 
      'orderby' => 'title', 
     ]; 
     $accessory_product = new WP_Query($accessory_product_args); ?> 

     <select name="_accessories_product_one" id="_accessories_product_one" class="widefat"> 
      <?php while ($accessory_product->have_posts()) : $accessory_product->the_post(); 
       $title_one = get_the_title(); 
       $postid_one = get_the_ID(); ?> 
       <option value="<?=$postid_one?>" <?php selected('_accessories_product_one[select_field_0]', $postid_one); ?>> 
        <?=$title_one?> 
       </option> 
      <?php endwhile; ?> 
     </select> 

     <?php 
     $dropdown_option = get_option('_accessories_product_one'); // Array 
     $dropdown_value = $dropdown_option ['select_field_0']; // Option value 

     var_dump($dropdown_option); 
     var_dump($dropdown_value); 
     ?> 
    <?php } 

    function custom_product_basic_save_post($post_id) { 
    if (isset($_POST['_accessories_product_one'])) { 

      update_post_meta($post_id, '_accessories_product_one', $_POST['_accessories_product_one']); 
     } 
    } 
+0

あなたのコードをフックで掲示する。 – vel

+0

@vel私は – HollerTrain

答えて

0

はこれを試してみてください。 post_metaに値を格納しています。しかしget_optionから取得しています。ポストメタ値を取得するためにget_optionを使用しないでください。

function custom_product_basic_load() { 

    add_action('add_meta_boxes_product' , 'custom_product_basic_add_meta_boxes_product'); 
    add_meta_box('custom_product_basic_metabox' , __('Product Layout') , 'custom_product_basic_metabox' , 'product' , 'normal' , 'high'); 
    add_action('save_post' , 'custom_product_basic_save_post' , 10 , 3); 

} 
add_action('load-post.php' , 'custom_product_basic_load'); 
add_action('load-post-new.php' , 'custom_product_basic_load'); 

function custom_product_basic_metabox($post) {?> 

    <input type="hidden" name="product_type" value="simple" /> 

    <?php 

    echo $productLayout = get_post_meta($post->ID, '_accessories_product_one',true); 

    $accessory_product_args = [ 
     'posts_per_page' => -1, 
      'tax_query' => [ 
       'relation' => 'AND', 
       [ 
        'taxonomy' => 'product_cat', 
        'field' => 'slug', 
        'terms' => 'accessories' 
       ], 
      ], 
     'post_type' => 'product', 
     'orderby' => 'title', 
    ]; 
    $accessory_product = new WP_Query($accessory_product_args); ?> 

    <select name="_accessories_product_one" id="_accessories_product_one" class="widefat"> 
     <?php while ($accessory_product->have_posts()) : $accessory_product->the_post(); 
      $title_one = get_the_title(); 
      $postid_one = get_the_ID(); ?> 
      <option value="<?=$postid_one?>" <?php selected($productLayout, $postid_one); ?>> 
       <?=$title_one?> 
      </option> 
     <?php endwhile; ?> 
    </select> 
    <?php 
} 

function custom_product_basic_save_post($post_id) { 
    if (isset($_POST['_accessories_product_one'])) { 

     update_post_meta($post_id, '_accessories_product_one', $_POST['_accessories_product_one']); 
    } 
} 
+0

を多く、多くのありがとう! – HollerTrain

関連する問題