2014-04-25 182 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'];' –

相关问题