在单一和可变产品的“附加信息区域”上显示 SKU

Posted

技术标签:

【中文标题】在单一和可变产品的“附加信息区域”上显示 SKU【英文标题】:Display SKU on the 'additional information area' for single and variable products 【发布时间】:2020-09-21 22:23:21 【问题描述】:

我正在尝试在单个产品附加信息选项卡的表格行中显示产品的 SKU。

我尝试使用 woocommerce_display_product_attributes 过滤器并显示它(下面是我的代码示例),但它仅适用于 简单产品

When using variable products with different SKU, the field are not updated when (dropdown select) variation is selected and only show blank.有没有合适的方法来做到这一点?

这是我当前的代码:

// Displays SKU/Part# to Single product Additional information table rows
add_filter('woocommerce_display_product_attributes', 'wc_display_sku_additional_info_table', 10, 2);
function wc_display_sku_additional_info_table( $product_attributes, $product )
    // Get product SKU
    $get_sku = ( $sku = $product->get_sku() ) ? $sku : esc_html__( 'N/A', 'woocommerce' );

    $product_attributes[] = [
        'label' => __('SKU', 'woocommerce'),
        'value' => $get_sku,
    ];
    return $product_attributes;

【问题讨论】:

【参考方案1】:

这应该足够了,在我的代码中添加解释的评论

对于singlevariable 产品,在附加信息选项卡中添加了一个 SKU 表行。 使用variable 产品的下拉选择菜单相应地更新 SKU 表行
function display_product_attributes( $product_attributes, $product ) 
    // Simple product
    if ( $product->is_type('simple' ) ) 
        // Get product SKU
        $get_sku = ( $sku = $product->get_sku() ) ? $sku : esc_html__( 'N/A', 'woocommerce' );

        // Add
        $product_attributes[ 'sku-field sku-field-single' ] = array(
            'label' => __('SKU', 'woocommerce'),
            'value' => $get_sku,
        );

     
    // Variable product
    elseif ( $product->is_type('variable' ) ) 
        // Get childIDs in an array
        $children_ids = $product->get_children();

        // Loop
        foreach ( $children_ids as $child_id ) 
            // Get product
            $product = wc_get_product( $child_id ); 

            // Get product SKU
            $get_sku = ( $sku = $product->get_sku() ) ? $sku : esc_html__( 'N/A', 'woocommerce' );

            // Add
            $product_attributes[ 'sku-field sku-field-variable sku-field-variable-' . $child_id ] = array(
                'label' => __('SKU', 'woocommerce'),
                'value' => $get_sku,
            );
        
        ?>
        <script>
        jQuery(document).ready(function($) 
            // Hide all rows
            $( '.sku-field-variable' ).css( 'display', 'none' );

            // Change
            $( 'input.variation_id' ).change( function() 
                // Hide all rows
                $( '.sku-field-variable' ).css( 'display', 'none' );

                if( $( 'input.variation_id' ).val() != '' ) 
                    var var_id = $( 'input.variation_id' ).val();

                    // Display current
                    $( '.sku-field-variable-' + var_id ).css( 'display', 'table-row' );
                
            );    
        );
        </script>
        <?php
    

    return $product_attributes;

add_filter('woocommerce_display_product_attributes', 'display_product_attributes', 10, 2);

【讨论】:

以上是关于在单一和可变产品的“附加信息区域”上显示 SKU的主要内容,如果未能解决你的问题,请参考以下文章

Magento:在发票上包含可配置的产品 Sku - 目前仅显示相关的简单产品

在 magento 产品导入数据流配置文件中显示 SKU

WooCommerce:在任何地方添加/显示产品或变体自定义字段

如何在opencart的同一页面上两次使用相同脚本中的脚本?

在WooCommerce产品选项编辑页面中,在SKU之前显示自定义字段

在WooCommerce中取代可变产品定价