You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce中instance-settings-modal内多选框显示异常问题

Hey there! Let’s figure out why that multiselect field isn’t showing up properly in your WooCommerce shipping method’s instance settings modal. I’ve run into this exact issue before, so here are the most common fixes to get it working:

1. Load the required Select2 assets

WooCommerce relies on Select2 for enhanced multiselect fields, but the instance settings modal might not automatically pull in the necessary scripts and styles. Add this method to your custom shipping method class to enqueue them when the admin dashboard loads:

public function admin_enqueue_scripts() {
    // Load WooCommerce admin styles and Select2 dependencies
    wp_enqueue_style( 'woocommerce_admin_styles' );
    wp_enqueue_script( 'select2' );
    wp_enqueue_style( 'select2' );
}

2. Add the critical class to your multiselect field

The biggest culprit is often missing the wc-enhanced-select class—WooCommerce uses this to trigger Select2 initialization. Update your Settings API field definition to include it:

'my_multiselect_field' => array(
    'title'       => __( 'My Multiselect', 'your-text-domain' ),
    'type'        => 'multiselect',
    'class'       => 'wc-enhanced-select', // This is essential!
    'options'     => array(
        'option1' => __( 'Option 1', 'your-text-domain' ),
        'option2' => __( 'Option 2', 'your-text-domain' ),
        'option3' => __( 'Option 3', 'your-text-domain' ),
    ),
    'description' => __( 'Pick multiple options from the list.', 'your-text-domain' ),
    'default'     => array(),
),

3. Manually initialize Select2 for dynamic modal content

Since the settings modal loads via AJAX, Select2 might not automatically detect the new field after the modal opens. Add this JavaScript to reinitialize it when the modal is ready:

jQuery( document ).on( 'wc-shipping-modal-init', function() {
    // Target all enhanced select fields inside the modal
    jQuery( '.wc-enhanced-select' ).select2();
} );

Enqueue this script using wp_enqueue_script in your admin setup code to make it available.

4. Verify your instance settings are properly registered

Double-check that your shipping method class correctly sets up instance settings. Ensure you have these core methods in place:

public function init_instance_settings() {
    $this->instance_form_fields = $this->get_instance_form_fields();
    parent::init_instance_settings();
}

public function get_instance_form_fields() {
    $settings = array(
        // Include your multiselect field here (as shown in step 2)
        // ... other instance settings fields ...
    );
    return apply_filters( 'woocommerce_shipping_' . $this->id . '_instance_settings_fields', $settings );
}

Start with steps 1 and 2 first—those usually resolve the issue. If the multiselect still doesn’t render correctly, step 3 will handle the dynamic modal loading scenario.

内容的提问来源于stack exchange,提问作者rmbits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:10:13