使用短代码显示选定的 WooCommerce 变体格式价格
Display the selected WooCommerce variation formatted price with shortcode
我创建了这段代码,可以在网站的任何页面上显示价格,由 woocommerce 控制。
add_shortcode( 'hhs_product_price', 'hhs_woo_product_price_shortcode' );
function hhs_woo_product_price_shortcode( $atts ) {
$atts = shortcode_atts( array(
'id' => null
), $atts, 'hhs_product_price' );
if ( empty( $atts[ 'id' ] ) ) {
return '';
}
$product = wc_get_product( $atts['id'] );
if ( ! $product ) {
return '';
}
return $product->get_price_html();
}
我想做的是修改代码,这样如果客户 select 的产品有变体。然后价格更改以显示变化价格。例如,现在如果一个人 select 有一种产品,在这种情况下是一种酊剂瓶,其价格变化与瓶子的大小有关。他们在产品页面上看到以下内容:-
产品(酊剂)30 - 50 美元
他们可以从下拉菜单中select选择 10 毫克瓶装(30 美元)、15 毫克瓶装(40 美元)或 20 毫克瓶装(50 美元)。因此,如果某人 select 选择 20 毫克,价格应显示为 $50 而不是 $30 - $50
我已经看过 Whosebug 上有类似问题的各种帖子,但这些解决方案都不适合我
- Display woocommerce variable product price
- Woocommerce get variation product price
任何帮助将不胜感激。
谢谢
要显示可变产品变体中的选定产品价格,需要 jQuery。因此,以下短代码将处理所有产品类型,包括可变产品及其价格变化:
add_shortcode( 'product_price', 'display_formatted_product_price' );
function display_formatted_product_price( $atts ) {
extract(shortcode_atts( array(
'id' => null
), $atts, 'product_price' ) );
global $product;
if( ! empty($id) || ! is_a($product, 'WC_Product') ) {
$product = wc_get_product( empty($id) ? get_the_id() : $id );
}
$price_html = $product->get_price_html();
// Others product types than variable
if ( ! $product->is_type('variable') ) {
return '<span class="product-price">' . $price_html . '</span>';
}
// For variable products
else {
ob_start();
?>
<script type="text/javascript">
jQuery( function($){
var p = '<?php echo $price_html; ?>', s = 'span.product-price';
$( 'form.variations_form.cart' ).on('show_variation', function(event, data) {
$(s).html(data.price_html); // Display the selected variation price
});
$( 'form.variations_form.cart' ).on('hide_variation', function() {
$(s).html(p); // Display the variable product price range
});
});
</script>
<?php
return ob_get_clean() . '<span class="product-price">' . $price_html . '</span>';
}
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
用法:
使用[product_price]
或在php代码中echo do_shortcode('[product_price]')
。
您还可以定义产品 ID(例如产品 ID 37
):[product_price id="37"]
我要感谢 LoicTheAztec 提供的这段代码已经过测试并且可以正常工作。但是,我在一个问题上大发雷霆:如果产品变体的价格都相同,则 price_html 将返回为空(此处描述的问题:https://github.com/woocommerce/woocommerce/issues/11827)。我用上面 github conv 中的过滤器解决了这个问题:
add_filter( 'woocommerce_show_variation_price', '__return_true');
我创建了这段代码,可以在网站的任何页面上显示价格,由 woocommerce 控制。
add_shortcode( 'hhs_product_price', 'hhs_woo_product_price_shortcode' );
function hhs_woo_product_price_shortcode( $atts ) {
$atts = shortcode_atts( array(
'id' => null
), $atts, 'hhs_product_price' );
if ( empty( $atts[ 'id' ] ) ) {
return '';
}
$product = wc_get_product( $atts['id'] );
if ( ! $product ) {
return '';
}
return $product->get_price_html();
}
我想做的是修改代码,这样如果客户 select 的产品有变体。然后价格更改以显示变化价格。例如,现在如果一个人 select 有一种产品,在这种情况下是一种酊剂瓶,其价格变化与瓶子的大小有关。他们在产品页面上看到以下内容:-
产品(酊剂)30 - 50 美元
他们可以从下拉菜单中select选择 10 毫克瓶装(30 美元)、15 毫克瓶装(40 美元)或 20 毫克瓶装(50 美元)。因此,如果某人 select 选择 20 毫克,价格应显示为 $50 而不是 $30 - $50
我已经看过 Whosebug 上有类似问题的各种帖子,但这些解决方案都不适合我
- Display woocommerce variable product price
- Woocommerce get variation product price
任何帮助将不胜感激。
谢谢
要显示可变产品变体中的选定产品价格,需要 jQuery。因此,以下短代码将处理所有产品类型,包括可变产品及其价格变化:
add_shortcode( 'product_price', 'display_formatted_product_price' );
function display_formatted_product_price( $atts ) {
extract(shortcode_atts( array(
'id' => null
), $atts, 'product_price' ) );
global $product;
if( ! empty($id) || ! is_a($product, 'WC_Product') ) {
$product = wc_get_product( empty($id) ? get_the_id() : $id );
}
$price_html = $product->get_price_html();
// Others product types than variable
if ( ! $product->is_type('variable') ) {
return '<span class="product-price">' . $price_html . '</span>';
}
// For variable products
else {
ob_start();
?>
<script type="text/javascript">
jQuery( function($){
var p = '<?php echo $price_html; ?>', s = 'span.product-price';
$( 'form.variations_form.cart' ).on('show_variation', function(event, data) {
$(s).html(data.price_html); // Display the selected variation price
});
$( 'form.variations_form.cart' ).on('hide_variation', function() {
$(s).html(p); // Display the variable product price range
});
});
</script>
<?php
return ob_get_clean() . '<span class="product-price">' . $price_html . '</span>';
}
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
用法:
使用[product_price]
或在php代码中echo do_shortcode('[product_price]')
。
您还可以定义产品 ID(例如产品 ID 37
):[product_price id="37"]
我要感谢 LoicTheAztec 提供的这段代码已经过测试并且可以正常工作。但是,我在一个问题上大发雷霆:如果产品变体的价格都相同,则 price_html 将返回为空(此处描述的问题:https://github.com/woocommerce/woocommerce/issues/11827)。我用上面 github conv 中的过滤器解决了这个问题:
add_filter( 'woocommerce_show_variation_price', '__return_true');