【问题标题】:Display selected variation custom fields value in WooCommerce product additional information tab在 WooCommerce 产品附加信息选项卡中显示选定的变体自定义字段值
【发布时间】:2021-06-28 05:08:01
【问题描述】:

我已经能够使用以下代码将自定义文本输入字段添加到我的可变产品的变体中:

// Add custom text input field to admin Product Data > Variations
add_action( 'woocommerce_variation_options_pricing', 'add_custom_field_to_variations', 10, 3 );
function add_custom_field_to_variations( $loop, $variation_data, $variation ) {
    woocommerce_wp_text_input( array(
        'id' => 'custom_field[' . $loop . ']',
        'class' => 'short',
        'label' => __( 'product size', 'woocommerce' ),
        'value' => get_post_meta( $variation->ID, 'custom_field', true )
    ) );
}
 
// Save custom field on product variation save
add_action( 'woocommerce_save_product_variation', 'save_custom_field_variations', 10, 2 );
function save_custom_field_variations( $variation_id, $i ) {
    $custom_field = $_POST['custom_field'][$i];
    if ( isset( $custom_field ) ) 
        update_post_meta( $variation_id, 'custom_field', esc_attr( $custom_field ) );
}
 
// Store custom field value into variation data
add_filter( 'woocommerce_available_variation', 'add_custom_field_variation_data' );
function add_custom_field_variation_data( $variations ) {
    $variations['custom_field'] = '<div class="woocommerce_custom_field">Custom Field: <span>' . 
    get_post_meta( $variations[ 'variation_id' ], 'custom_field', true ) . '</span></div>';

    return $variations;
}

代码工作并保存输入的变化值(见下面的屏幕截图)。

现在这是我的代码尝试在附加信息选项卡中获取和显示自定义字段值:

function yourprefix_woocommerce_display_product_attributes($variation_data, $variations){
    $variation_data['custom_field'] = [
        'label' => __('size', 'text-domain'),
        'value' => get_post_meta($variations->ID, 'custom_field', true),
    ];
    return $variation_data;
}
add_filter('woocommerce_display_product_attributes', 'yourprefix_woocommerce_display_product_attributes', 10, 2);

但它没有显示我在变量中输入的值。

感谢任何帮助。

【问题讨论】:

    标签: php jquery woocommerce custom-fields product-variations


    【解决方案1】:

    您的代码有点过时,并且存在一些错误和遗漏:需要一些额外的 jQuery 代码才能在附加信息选项卡中显示选定的变体“大小”自定义字段值。

    您应该始终使用明确的 slug 命名自定义字段字段键。

    这里是完整的重新访问的代码:

    // Admin Product > Variations: Display an input text field
    add_action( 'woocommerce_variation_options_pricing', 'add_admin_product_variations_custom_field', 10, 3 );
    function add_admin_product_variations_custom_field( $loop, $variation_data, $variation ) {
        woocommerce_wp_text_input( array(
            'id' => 'size[' . $loop . ']',
            'class' => 'short',
            'label' => __( 'product size', 'woocommerce' ),
            'value' => get_post_meta( $variation->ID, '_size', true )
        ) );
    }
    
    // Admin Product > Variations: Save input text field submited value
    add_action( 'woocommerce_admin_process_variation_object', 'save_admin_product_variations_custom_field', 10, 2 );
    function save_admin_product_variations_custom_field( $variation, $i ) {
        if ( isset($_POST['size'][$i]) ) {
            $variation->update_meta_data( '_size', sanitize_text_field($_POST['size'][$i]) );
        }
    }
    
    // Frontend Variable products: Link variation custom field value
    add_filter( 'woocommerce_available_variation', 'set_available_variation_custom_field', 10, 3 );
    function set_available_variation_custom_field( $variation_data, $product, $variation ) {
        return array_merge( $variation_data, array(
            'size' => $variation->get_meta('_size'),
        ) );
    }
    
    // Frontend Variable products > additional information tab: Display "Size" label with an empty value
    add_filter( 'woocommerce_display_product_attributes', 'Display_custom_field_label_with_empty_value', 10, 3 );
    function Display_custom_field_label_with_empty_value( $product_attributes, $product ) {
        $product_attributes[ 'size' ] = array(
            'label' => __('Size', 'text-domain'),
            'value' => '',
        );
        return $product_attributes;
    }
    
    // Variable Product (jQuery): Selected variation displays custom field value
    add_action( 'woocommerce_before_variations_form', 'custom_variations_js_script' );
    function custom_variations_js_script() {
        wc_enqueue_js( "jQuery( function($){
            var sizeObj = $('tr.woocommerce-product-attributes-item--size > td');
            $('form.variations_form').on('show_variation', function(event, data){
                sizeObj.text(data.size);
            }).on('hide_variation', function(){
                sizeObj.text('');
            })
        });" );
    }
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    【讨论】:

    • 代码是否适用于 woocommerce 5 及更高版本?在我的情况下,jQuery 部分不适用于 show_variation 回调。当更改为 $('form.variations_form').on('change'... 时,我在 data 对象中未定义
    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 2021-02-03
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2021-04-12
    相关资源
    最近更新 更多