在WooCommerce中获取并显示所选变体SKU

问题描述 投票:1回答:3

我有此代码适用于简单产品类型,但不适用于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() );
}

如何使它适用于简单和可变产品?

php jquery wordpress woocommerce shortcode
3个回答
0
投票

您需要变体ID才能获得可变产品的SKU。

如果在下面的函数中传递变量ID,则可以获取其SKU。

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

以下代码可用于获取产品的变体。然后将结果放下以获得变体ID,然后在上面的代码中使用该变体ID来获得结果。

$variations = $product->get_available_variations();

0
投票

您需要使用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'] );
    }
}

参考:


0
投票

为了使其也适用于可变产品及其变体,它需要Java语言(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( i, v ){
                $( 'div.widget' ).attr( 'sp-sku', v.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文件中。经过测试和工作。

© www.soinside.com 2019 - 2024. All rights reserved.