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