我使用“ Display price on add to cart button from the functions.php file in Woocommerce” 答案代码,该代码会在简单产品内添加价格。
但是我想改进此功能并在按钮内动态显示所选的变化价格。在变型产品页面上使用此代码,它仅显示最低价格。 有什么解决办法吗?
答案 0 :(得分:2)
也许对某人有用! Result. Add to cart button of variable product
add_filter( 'woocommerce_product_add_to_cart_text', 'custom_add_to_cart_price', 20, 2 ); // Shop and other archives pages
add_filter( 'woocommerce_product_single_add_to_cart_text', 'custom_add_to_cart_price', 20, 2 ); // Single product pages
function custom_add_to_cart_price( $button_text, $product ) {
// Variable products
if( $product->is_type('variable') ) {
// shop and archives
if( ! is_product() ){
$product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $product->get_variation_price() ) ) );
return $button_text . ' - From ' . strip_tags( $product_price );
}
// Single product pages
else {
$variations_data =[]; // Initializing
// Loop through variations data
foreach($product->get_available_variations() as $variation ) {
// Set for each variation ID the corresponding price in the data array (to be used in jQuery)
$variations_data[$variation['variation_id']] = $variation['display_price'];
}
?>
<script>
jQuery(function($) {
var jsonData = <?php echo json_encode($variations_data); ?>,
inputVID = 'input.variation_id';
$('input').change( function(){
if( '' != $(inputVID).val() ) {
var vid = $(inputVID).val(), // VARIATION ID
vprice = ''; // Initilizing
// Loop through variation IDs / Prices pairs
$.each( jsonData, function( index, price ) {
if( index == $(inputVID).val() ) {
vprice = Math.round(price); // The right variation price
}
});
// Change price dynamically when changing options
$( "button.single_add_to_cart_button.button.alt span" ).remove();
$(".single_add_to_cart_button").append("<span>" + " " + vprice + " ₴" + "</span>");
}
});
});
</script><?php
return $button_text;
}
}
// All other product types
else {
$product_price = wc_price( wc_get_price_to_display( $product ) );
return $button_text . ' ' . strip_tags( $product_price );
}
}