Получить и отобразить выбранный вариант SKU в WooCommerce - PullRequest
2 голосов
/ 18 февраля 2020

У меня есть этот код, который работает для простого типа продукта, но не для переменных продуктов в 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() );
}

Как я могу заставить его работать как для простых, так и для переменных продуктов?

Ответы [ 3 ]

2 голосов
/ 18 февраля 2020

Чтобы он работал также для переменных продуктов и их вариаций, требуется 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( 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() );
    }
}

Код входит в функции. php файл вашей активной дочерней темы (или активная тема). Проверено и работает.

2 голосов
/ 18 февраля 2020

Для получения SKU продукта с переменными значениями вам нужен ID варианта.

Если вы передадите ID варианта в приведенной ниже функции, вы можете получить его SKU.

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

код ниже может быть использован, чтобы получить варианты продукта. Затем пропустите результат, чтобы получить идентификатор варианта, а затем используйте этот идентификатор варианта в приведенном выше коде, чтобы получить результат.

$variations = $product->get_available_variations();
1 голос
/ 18 февраля 2020

Вам необходимо использовать 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'] );
    }
}

Ссылка:

...