Woocommerce 后端中的多复选框字段 [英] Multi checkbox fields in Woocommerce backend
问题描述
我一直在尝试在 woocommerce 后端添加一个自定义字段,用户可以在其中多选某个级别的复选框.
是否可以创建多个复选框?到目前为止,我有这个:
woocommerce_wp_checkbox(大批('id' =>'_custom_product_niveau_field','类型' =>'复选框','标签' =>__('Niveau', 'woocommerce'),'选项' =>大批('MBO' =>__( 'MBO', 'woocommerce'),'HBO' =>__('HBO', 'woocommerce'),'WO' =>__( 'WO', 'woocommerce' )))
但这不起作用... woocommerce_wp_checkbox 是否支持此功能?
2021 更新
<块引用>2021 年更新 - 解决了以下问题:
• in_array()
其中第二个参数是 start* 上的字符串.
• $thepostid
因为在某些情况下它是空的.
可以通过这种方式创建自定义函数:
//woocommerce 后端的新多复选框字段函数 woocommerce_wp_multi_checkbox( $field ) {全球 $thepostid, $post;如果(!$thepostid){$thepostid = $post->ID;}$field['value'] = get_post_meta( $thepostid, $field['id'], true );$thepostid = 空( $thepostid )?$post->ID : $thepostid;$field['class'] = isset( $field['class'] ) ?$field['class'] : '选择短';$field['style'] = isset( $field['style'] ) ?$field['style'] : '';$field['wrapper_class'] = isset( $field['wrapper_class'] ) ?$field['wrapper_class'] : '';$field['value'] = isset( $field['value'] ) ?$field['value'] : array();$field['name'] = isset( $field['name'] ) ?$field['name'] : $field['id'];$field['desc_tip'] = isset( $field['desc_tip'] ) ?$field['desc_tip'] : false;echo '
代码位于活动子主题(或活动主题)的 function.php 文件中.经测试有效.
<块引用>相关:
<块引用>所选值已正确保存和显示.有关信息,该值是一个数组.
Ive been trying to add a custom field in woocommerce backend where users can multiselect checkboxes for a certain level.
Is it possible to create multiple checkboxes? So far i have this:
woocommerce_wp_checkbox(
array(
'id' => '_custom_product_niveau_field',
'type' => 'checkbox',
'label' => __('Niveau', 'woocommerce'),
'options' => array(
'MBO' => __( 'MBO', 'woocommerce' ),
'HBO' => __( 'HBO', 'woocommerce' ),
'WO' => __( 'WO', 'woocommerce' )
)
)
But that doesnt work... Does woocommerce_wp_checkbox have support for this?
2021 Update
2021 Update - Solved issues with:
•in_array()
where 2nd argument was a string on start*.
•$thepostid
as in some cases it was empty.
That is possible creating a custom function this way:
// New Multi Checkbox field for woocommerce backend
function woocommerce_wp_multi_checkbox( $field ) {
global $thepostid, $post;
if( ! $thepostid ) {
$thepostid = $post->ID;
}
$field['value'] = get_post_meta( $thepostid, $field['id'], true );
$thepostid = empty( $thepostid ) ? $post->ID : $thepostid;
$field['class'] = isset( $field['class'] ) ? $field['class'] : 'select short';
$field['style'] = isset( $field['style'] ) ? $field['style'] : '';
$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';
$field['value'] = isset( $field['value'] ) ? $field['value'] : array();
$field['name'] = isset( $field['name'] ) ? $field['name'] : $field['id'];
$field['desc_tip'] = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;
echo '<fieldset class="form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '">
<legend>' . wp_kses_post( $field['label'] ) . '</legend>';
if ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {
echo wc_help_tip( $field['description'] );
}
echo '<ul class="wc-radios">';
foreach ( $field['options'] as $key => $value ) {
echo '<li><label><input
name="' . esc_attr( $field['name'] ) . '"
value="' . esc_attr( $key ) . '"
type="checkbox"
class="' . esc_attr( $field['class'] ) . '"
style="' . esc_attr( $field['style'] ) . '"
' . ( is_array( $field['value'] ) && in_array( $key, $field['value'] ) ? 'checked="checked"' : '' ) . ' /> ' . esc_html( $value ) . '</label>
</li>';
}
echo '</ul>';
if ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {
echo '<span class="description">' . wp_kses_post( $field['description'] ) . '</span>';
}
echo '</fieldset>';
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
Usage example (for a simple product):
// Add custom multi-checkbox field for product general option settings
add_action( 'woocommerce_product_options_general_product_data', 'add_custom_settings_fields', 20 );
function add_custom_settings_fields() {
global $post;
echo '<div class="options_group hide_if_variable"">'; // Hidding in variable products
woocommerce_wp_multi_checkbox( array(
'id' => '_custom_level',
'name' => '_custom_level[]',
'label' => __('Levels', 'woocommerce'),
'options' => array(
'MBO' => __( 'MBO', 'woocommerce' ),
'HBO' => __( 'HBO', 'woocommerce' ),
'WO' => __( 'WO', 'woocommerce' )
)
) );
echo '</div>';
}
// Save custom multi-checkbox fields to database when submitted in Backend (for all other product types)
add_action( 'woocommerce_process_product_meta', 'save_product_options_custom_fields', 30, 1 );
function save_product_options_custom_fields( $post_id ){
if( isset( $_POST['_custom_level'] ) ){
$post_data = $_POST['_custom_level'];
// Data sanitization
$sanitize_data = array();
if( is_array($post_data) && sizeof($post_data) > 0 ){
foreach( $post_data as $value ){
$sanitize_data[] = esc_attr( $value );
}
}
update_post_meta( $post_id, '_custom_level', $sanitize_data );
}
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
The selected values are correctly saved and displayed. For info the value is an array.
这篇关于Woocommerce 后端中的多复选框字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!