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',
))
);
+1太谢谢你了:) –
@Danijel我们怎样才能改变此自定义字段保存功能。我有一个位置字段,用户可以选择多个位置。我将如何使用相同的密钥保存两个元值? –
我通过序列化'$ _POST ['newoptions'];' –