簡體   English   中英

在 WooCommerce 中獲取並顯示選定的變體 SKU

[英]Get and display the selected variation SKU in WooCommerce

我有這段代碼適用於簡單的產品類型,但不適用於 WooCommerce 中的可變產品:

add_shortcode( 'product_sku_div', 'wc_product_sku_div'); 
function wc_product_sku_div() { 
    global $product;

    return sprintf( '<div class="widget" sp-sku="%s"></div>', $product->get_sku() );
}

我怎樣才能使它既適用於簡單產品又適用於可變產品?

為了使其也適用於可變產品及其變體,它需要 Javascript (jQuery)來獲取可變產品的選定變體 SKU。

嘗試以下適用於簡單可變產品類型的方法,顯示可變產品的選定變體 SKU:

add_shortcode( 'product_sku_div', 'wc_product_sku_div');
function wc_product_sku_div() {
    global $product;

    if( ! is_a('WC_Product', $product) ) {
        $product = wc_get_product( get_the_id() );
    }

    ## 1 - For variable products (and their variations)
    if( $product->is_type('variable') ) {
        ob_start(); // Starting buffering

        ?>
        <div class="widget" sp-sku=""></div>
        <script type="text/javascript">
        jQuery( function($){
            $('form.variations_form').on('show_variation', function( event, data ){
                $( 'div.widget' ).attr( 'sp-sku', data.sku );
                // For testing
                console.log( 'Variation Id: ' + data.variation_id + ' | Sku: ' + data.sku );
            });
            $('form.variations_form').on('hide_variation', function(){
                $( 'div.widget' ).attr( 'sp-sku', '' );
            });
        });
        </script><?php

        return ob_get_clean(); // return the buffered content
    }
    ## 2 - For other products types
    else {
        return sprintf( '<div class="widget" sp-sku="%s"></div>', $product->get_sku() );
    }
}

代碼位於活動子主題(或活動主題)的 functions.php 文件中。 測試和工作。

您需要變體 ID 才能獲取可變產品的 SKU。

如果您在下面的函數中傳遞 Variation ID,那么您可以獲得它的 SKU。

$product = new WC_Product_Variation($variation_id);
$product->get_sku();

以下代碼可用於獲取產品的變體。 然后對結果進行 lopp 獲取變體 ID,然后在上面的代碼中使用該變體 ID 來獲取結果。

$variations = $product->get_available_variations();

您需要使用get_available_variations(); .

add_shortcode( 'product_sku_div', 'wc_product_sku_div'); 
function wc_product_sku_div() { 
    global $product;

    $variants_array = $product->get_available_variations();

    for ($i = 0; $i <  count($variants_array); $i++ ) {
        return sprintf( '<div class="widget" sp-sku="%s"></div>', $variants_array[$i]['sku'] );
    }
}

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM