2014-04-25 183 views
2

我想在單個產品頁面上添加列表框,我想知道沒有選項在woocommerce多選,get_option字段woocommerce支持multiselect但post_meta woocommerce支持只有一個選擇,不是確定woocommerce是否有任何限制,或者我可能會錯過獲得多重選擇的東西?這裏是我試過的下面的代碼WooCommerce多選擇單一產品領域

function create_multiselect() { 

    woocommerce_wp_select(array(
       'id' => 'newoptions', 
       'class' => 'newoptions', 
       'label' => __('Testing Multiple Select', 'woocommerce'), 
       'options' => array(
        '1' => 'User1', 
        '2' => 'User2', 
        '3' => 'User3', 
       )) 
      ); 

    } 

    add_action("woocommerce_product_options_pricing","create_multiselect"); 

任何建議都會很好。

回答

5

woocommerce_wp_select()功能不支持多選,您可以打開wc-meta-box-functions.php文件,在/woocommerce/includes/admin目錄中查看默認行爲。

但是,阻止你創建基於默認Woo函數的自己的函數,並添加所需的功能,甚至更改默認功能(但仍然修改插件文件不是最佳實踐)。下面是一個如何編寫一個具有多個支持的新函數的例子,從原來的唯一更改是添加對名稱和多個屬性的支持,以及對所選項目的不同邏輯(因爲post meta現在是一個數組)。

function woocommerce_wp_select_multiple($field) { 
    global $thepostid, $post, $woocommerce; 

    $thepostid    = empty($thepostid) ? $post->ID : $thepostid; 
    $field['class']   = isset($field['class']) ? $field['class'] : 'select short'; 
    $field['wrapper_class'] = isset($field['wrapper_class']) ? $field['wrapper_class'] : ''; 
    $field['name']   = isset($field['name']) ? $field['name'] : $field['id']; 
    $field['value']   = isset($field['value']) ? $field['value'] : (get_post_meta($thepostid, $field['id'], true) ? get_post_meta($thepostid, $field['id'], true) : array()); 

    echo '<p class="form-field ' . esc_attr($field['id']) . '_field ' . esc_attr($field['wrapper_class']) . '"><label for="' . esc_attr($field['id']) . '">' . wp_kses_post($field['label']) . '</label><select id="' . esc_attr($field['id']) . '" name="' . esc_attr($field['name']) . '" class="' . esc_attr($field['class']) . '" multiple="multiple">'; 

    foreach ($field['options'] as $key => $value) { 

     echo '<option value="' . esc_attr($key) . '" ' . (in_array($key, $field['value']) ? 'selected="selected"' : '') . '>' . esc_html($value) . '</option>'; 

    } 

    echo '</select> '; 

    if (! empty($field['description'])) { 

     if (isset($field['desc_tip']) && false !== $field['desc_tip']) { 
      echo '<img class="help_tip" data-tip="' . esc_attr($field['description']) . '" src="' . esc_url(WC()->plugin_url()) . '/assets/images/help.png" height="16" width="16" />'; 
     } else { 
      echo '<span class="description">' . wp_kses_post($field['description']) . '</span>'; 
     } 

    } 
    echo '</p>'; 
} 

的如何使用功能實例:

woocommerce_wp_select_multiple(array(
    'id' => 'newoptions', 
    'name' => 'newoptions[]', 
    'class' => 'newoptions', 
    'label' => __('Testing Multiple Select', 'woocommerce'), 
    'options' => array(
     '1' => 'User1', 
     '2' => 'User2', 
     '3' => 'User3', 
    )) 
); 
+0

+1太謝謝你了:) –

+1

@Danijel我們怎樣才能改變此自定義字段保存功能。我有一個位置字段,用戶可以選擇多個位置。我將如何使用相同的密鑰保存兩個元值? –

+1

我通過序列化'$ _POST ['newoptions'];' –

相關問題