WooCommerce 不提供特定的操作挂钩,可让您在产品标题之后添加任何内容,这也利用了当前代码中的挂钩等变体数据。您可以通过 JavaScript/jQuery 在产品标题后添加一个元素来解决此问题。
您希望此元素根据所选变体动态更改。由于您无法直接在操作挂钩中访问变体数据,因此您必须检查variation_id
WooCommerce 用于存储所选变体 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 这样的插件。