gpt4 book ai didi

php - WooCommerce 自定义字段 - 多选

转载 作者:可可西里 更新时间:2023-10-31 22:13:51 25 4
gpt4 key购买 nike

我正在向 WooCommerce 的结帐页面添加额外的字段,我可以添加文本框等基本字段,但需要添加一个(多)选择框,用户可以在其中选择多个项目。我已经想出如何通过代码添加一个选择框,如下所示:

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>';

}

但这只是一个单一的选择下拉列表。
我可以为多选做类似的事情吗?
或者您有推荐的 WooCommerce 扩展吗?

请多多指教,先谢谢了!

最佳答案

您需要创建自己的自定义字段类型处理程序。如果你看WooCommerce source code你会看到你可以使用 filter: 'woocommerce_form_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 = '&nbsp;<abbr class="required" title="' . esc_attr__('required', 'woocommerce') . '">*</abbr>';
}
else {
$required = '&nbsp;<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_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>';

}

关于php - WooCommerce 自定义字段 - 多选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13684533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com