Php WooCommerce自定义字段-Multiselect
我在WooCommerce的结帐页面中添加了额外的字段,我可以添加基本字段,如文本框,但需要添加一个(多)选择框,用户可以在其中选择多个项目。我已经了解了如何通过代码添加选择框,如下所示:Php WooCommerce自定义字段-Multiselect,php,forms,wordpress,multi-select,woocommerce,Php,Forms,Wordpress,Multi Select,Woocommerce,我在WooCommerce的结帐页面中添加了额外的字段,我可以添加基本字段,如文本框,但需要添加一个(多)选择框,用户可以在其中选择多个项目。我已经了解了如何通过代码添加选择框,如下所示: add_action('woocommerce_after_order_notes', 'my_custom_checkout_field'); function my_custom_checkout_field( $checkout ) { echo '<div id="my_custom
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
woocommerce_form_field( 'my_field_name', array(
'type' => 'select',
'class' => array('my-field-class form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
'options' => array(
'Buick' => __('Buick', 'woocommerce' ),
'Ford' => __('Ford', 'woocommerce' )
)
), $checkout->get_value( 'my_field_name' ));
echo '</div>';
}
add_action('woocommerce_在订单注释之后,'my_custom_checkout_字段');
函数my_custom_checkout_字段($checkout){
回显“.”(“我的字段”);
woocommerce\u表单\u字段('my\u field\u name',数组(
'类型'=>'选择',
'class'=>array('my-field-class表单行宽'),
“label'=>”(填写此字段),
“占位符”=>“‘输入某物’”,
“选项”=>数组(
“别克”=>“‘别克’、‘woocommerce’”,
‘福特’=>(‘福特’、‘woocommerce’)
)
),$checkout->get_value('my_field_name');
回声';
}
但这只是一个单选下拉列表。我可以为multi-select执行类似操作吗?
或者你有推荐的WooCommerce分机吗
敬请指教,提前感谢 您需要创建自己的自定义字段类型处理程序。如果你看一下,你会发现你可以使用过滤器:
“woocommerce\u form\u field”$args['type']
我还没有真正测试过这个,这只是从单个“选择”控件中稍微修改的代码,但您得到了要点:
add_filter( 'woocommerce_form_field_multiselect', 'custom_multiselect_handler', 10, 4 );
function custom_multiselect_handler( $field, $key, $args, $value ) {
$options = '';
if ( ! empty( $args['options'] ) ) {
foreach ( $args['options'] as $option_key => $option_text ) {
$options .= '<option value="' . $option_key . '" '. selected( $value, $option_key, false ) . '>' . $option_text .'</option>';
}
if ($args['required']) {
$args['class'][] = 'validate-required';
$required = ' <abbr class="required" title="' . esc_attr__('required', 'woocommerce') . '">*</abbr>';
}
else {
$required = ' <span class="optional">(' . esc_html__('optional', 'woocommerce') . ')</span>';
}
$field = '<p class="form-row ' . implode( ' ', $args['class'] ) .'" id="' . $key . '_field">
<label for="' . $key . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>
<select name="' . $key . '" id="' . $key . '" class="select" multiple="multiple">
' . $options . '
</select>
</p>' . $args['after'];
}
return $field;
}
add_filter('woocommerce_form_field_multiselect','custom_multiselect_handler',10,4);
函数自定义\多选择\处理程序($field、$key、$args、$value){
$options='';
如果(!empty($args['options'])){
foreach($args['options']作为$option\u key=>$option\u text){
$options.=''.$options_text.';
}
如果($args['required'])){
$args['class'][]='validate required';
$required='*';
}
否则{
$required='('.esc_html_uuu('optional','woocommerce'));
}
$field='
“.$args['label'].$required.”
“.$options。”
“.$args[”后面“];
}
返回$field;
}
在代码中,只需将类型声明为“multiselect”:
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
woocommerce_form_field( 'my_field_name', array(
'type' => 'multiselect',
'class' => array('my-field-class form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
'options' => array(
'Buick' => __('Buick', 'woocommerce' ),
'Ford' => __('Ford', 'woocommerce' )
)
), $checkout->get_value( 'my_field_name' ));
echo '</div>';
}
add_action('woocommerce_在订单注释之后,'my_custom_checkout_字段');
函数my_custom_checkout_字段($checkout){
回显“.”(“我的字段”);
woocommerce\u表单\u字段('my\u field\u name',数组(
'type'=>'multiselect',
'class'=>array('my-field-class表单行宽'),
“label'=>”(填写此字段),
“占位符”=>“‘输入某物’”,
“选项”=>数组(
“别克”=>“‘别克’、‘woocommerce’”,
‘福特’=>(‘福特’、‘woocommerce’)
)
),$checkout->get_value('my_field_name');
回声';
}
如果您对代码片段有问题,您可以使用此woocommerce插件轻松完成此操作。“Woocommerce轻松签出字段编辑器”。您可以在codecanyon上找到它有人知道如何将这些多选项保存到管理员吗?我只保存最后选择的选项。