1

我正在使用 WooCommerce,并尝试在产品页面上产品标题下方显示产品变体 SKU。我设法找到了这段代码,它可以工作,但将 SKU 显示在错误的位置:

// Display product variations SKU and GTIN info
add_filter( 'woocommerce_available_variation', 'display_variation_sku_and_gtin', 20, 3 );
function display_variation_sku_and_gtin( $variation_data, $product, $variation ) {
$html = ''; // Initializing

// Inserting SKU
if( ! empty( $variation_data['sku'] ) ){
    $html .= '</div><div class="woocommerce-variation-sku">' . __('SKU:') . ' ' . $variation_data['sku'];
}

// Using the variation description to add dynamically the SKU and the GTIN
$variation_data['variation_description'] .= $html;

return $variation_data;
}

任何人都可以帮助更改此代码的顺序,以便 SKU 显示在产品标题下方,或者帮助我提供一些新代码吗?

非常感谢!

4

1 回答 1

1

WooCommerce 不提供特定的操作挂钩,可让您在产品标题之后添加任何内容,这也利用了当前代码中的挂钩等变体数据。您可以通过 JavaScript/jQuery 在产品标题后添加一个元素来解决此问题。

您希望此元素根据所选变体动态更改。由于您无法直接在操作挂钩中访问变体数据,因此您必须检查variation_idWooCommerce 用于存储所选变体 ID 的隐藏输入。然后在每次输入更改时使用 AJAX 来检索属于此变体 id 的变体 SKU。

add_action( 'woocommerce_before_single_product', 'show_variation_sku_underneath_product_title' );
function show_variation_sku_underneath_product_title() {

    global $product;

    if ( $product->is_type('variable') ) {
        ?>
        <script>
        jQuery(document).ready(function($) {     
            $('input.variation_id').change( function(){
                if( '' != $('input.variation_id').val() ) {

                    jQuery.ajax( {

                        url: '<?php echo admin_url( 'admin-ajax.php'); ?>',
                        type: 'post',
                        data: { 
                            action: 'get_variation_sku', 
                            variation_id: $('input.variation_id').val()
                        },
                        success: function(data) {
                            $('h1.product_title').siblings('.variation-sku').remove();
                            if(data.length > 0) {
                                $('h1.product_title').after('<p class="variation-sku">' + data + '</p>');
                            }
                        }
                    });

                }
            });
        });
        </script>
    <?php
    }
}
    
add_action('wp_ajax_get_variation_sku' , 'get_variation_sku');
add_action('wp_ajax_nopriv_get_variation_sku','get_variation_sku');
function get_variation_sku() {

    $variation_id = intval( $_POST['variation_id'] );
    $sku = '';

    if ( $product = wc_get_product( $variation_id ) ) $sku = $product->get_sku();
    echo $sku;

    wp_die(); // this is required to terminate immediately and return a proper response
}

这些代码片段应该添加到您的子主题的functions.php 中,或者通过像Code Snippets 这样的插件。

于 2020-06-28T08:44:38.927 回答