Woocommerce 后端中的多复选框字段 [英] Multi checkbox fields in Woocommerce backend

查看:36
本文介绍了Woocommerce 后端中的多复选框字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试在 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 '
';foreach ( $field['options'] as $key => $value ) {echo '
  • ';}回声'</ul>';if ( !empty( $field['description'] ) && false === $field['desc_tip'] ) {echo ''.wp_kses_post( $field['description'] ) .'</span>';}回声'</fieldset>';}

    代码位于活动子主题(或活动主题)的 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.

    Related: Multi Select fields in Woocommerce backend


    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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆