2017-08-23 14 views
2

私は提出すると、編集管理ページの注文に追加されたカスタム選択フィールドをキャッチする方法は?WooCommerceの管理者の注文を保存する投稿を編集する

ファイルclass-wc-meta-box-order-data.phpにこのカスタム選択フィールドを追加しました。私はこれを取得:

enter image description here

をしかし、私はキャッチしたり、私がwp-admin/post.php$_POST['vendor']を追加しようとしましたが、それは動作しない$_POST['vendor']

を保存する方法を知りません。

これは私が追加したコードです:

<select class="wc-customer-search" id="customer_user" name="customer_user" data-placeholder="<?php esc_attr_e('Guest', 'woocommerce'); ?>" data-allow_clear="true"> 
           <option value="<?php echo esc_attr($user_id); ?>" selected="selected"><?php echo htmlspecialchars($user_string); ?></option> 
          </select> 
          <!--/email_off--> 
         </p> 
        <p> <label for="order_status">供應商: </label> 
        <select name="vendor"> 
    <?php 
      global $wpdb; 
    $user_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->users"); 
    for($i=1;$i<=$user_count;$i++){ 
    $user_info = get_userdata($i); 

    if (implode(', ', $user_info->roles)=='vendor') 
echo "<option value=".$user_info->user_login.">$user_info->user_login</option>"; 
    } 
        ?> 
</select></p> 

がどのように送信された値とどのように私はそれを保存することができますを得ることができますか?

答えて

0

コアファイルを上書きすることは開発者にとって禁止されています。 これは正しい方法ではありません。

プラグインが更新されるときにすべてを失うので、このコアファイルを上書きするのではなく、ソースコード内の利用可能なフックを使用する方法があります。

  1. ではなく(私はいくつかのマイナー、必要な変更を加える必要があり)、このコードを追加し、すべてオリジナルのコアファイル
  2. を交換してください。ここで

置換コード+オーダーのメタデータにデータを保存するためのフックです。また

add_action('woocommerce_admin_order_data_after_order_details', 'custom_code_after_order_details', 10, 1); 
function custom_code_after_order_details ($order) { 


    $value = get_post_meta($order->get_id(), '_vendor', true); 
    ?> 
    <p> <label for="order_status">供應商: </label> 
    <select name="vendor"> 
    <?php global $wpdb; 
     $user_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->users"); 
     echo '<option value="">Select a vendor</option>'; 
     for($i=1;$i<=$user_count;$i++){ 
      $user_info = get_userdata($i); 
      if (implode(', ', $user_info->roles)=='customer'){ 
       $user_login = $user_info->user_login; 
       $selected = $value == $user_login ? 'selected' : ''; 
       echo '<option '.$selected.' value="'.$user_login.'">'.$user_login.'</option>'; 
      } 
     } 
    ?> 
    </select></p> 
    <input type="hidden" name="custom_select_field_nonce" value="<?php echo wp_create_nonce(); ?>"> 
    <?php 
} 

add_action('save_post', 'save_custom_code_after_order_details', 10, 1); 
function save_custom_code_after_order_details($post_id) { 

    // We need to verify this with the proper authorization (security stuff). 

    // Check if our nonce is set. 
    if (! isset($_POST[ 'custom_select_field_nonce' ])) { 
     return $post_id; 
    } 
    $nonce = $_REQUEST[ 'custom_select_field_nonce' ]; 

    //Verify that the nonce is valid. 
    if (! wp_verify_nonce($nonce)) { 
     return $post_id; 
    } 

    // If this is an autosave, our form has not been submitted, so we don't want to do anything. 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 
     return $post_id; 
    } 

    // Check the user's permissions. 
    if ('page' == $_POST[ 'post_type' ]) { 

     if (! current_user_can('edit_page', $post_id)) { 
      return $post_id; 
     } 
    } else { 

     if (! current_user_can('edit_post', $post_id)) { 
      return $post_id; 
     } 
    } 

    // Update the meta field in the database. 
    update_post_meta($post_id, '_vendor', $_POST[ 'vendor' ]); 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルに行きますか任意のプラグインファイルに保存します。

このコードはテスト済みであり、動作します。

関連する問題