在 Woocommerce 简单产品中显示前缀价格和附加单价
Display prefixed price and additional unit price in Woocommerce simple products
我使用 Woocommerce 每箱销售 6 瓶葡萄酒。
所以在设置我的产品时,我自然会输入每盒的价格。
不过,我确实希望用户也能看到每瓶的价格。
$120/盒
20 美元/瓶
我尝试使用 答案代码。它完全符合我的要求,除了它删除了原始(每盒)价格。
下面经过编辑的代码段显示了原始 $price 和单位 $price 以及 group/unit 指标(对于简单产品):
add_filter( 'woocommerce_get_price_html', 'unit_product_price_on_archives', 10, 2 );
function unit_product_price_on_archives( $price, $product ) {
if ( is_product() || is_product_category() || is_product_tag() ) {
$unit_divider = 6;
$group_suffix = ' '. __('(per box)', 'woocommerce');
$unit_suffix = ' '. __('(per bottle)', 'woocommerce');
if( $product->is_on_sale() )
{
$regular_price_unit = $product->get_regular_price() / $unit_divider;
$regular_price_unit = wc_get_price_to_display( $product, array( 'price' => $regular_price_unit ) );
$regular_price_group = $product->get_regular_price();
$regular_price_group = wc_get_price_to_display( $product, array( 'price' => $regular_price_group ) );
$group_price_sale = $product->get_sale_price();
$group_price_sale = wc_get_price_to_display( $product, array( 'price' => $group_price_sale ) );
$group_price_sale = wc_format_sale_price( $regular_price_group, $group_price_sale ) . $group_suffix;
$unit_price_sale = $product->get_sale_price() / $unit_divider;
$unit_price_sale = wc_get_price_to_display( $product, array( 'price' => $unit_price_sale ) );
$unit_price_sale = wc_format_sale_price( $regular_price_unit, $unit_price_sale ) . $unit_suffix;
$price = $group_price_sale . '<br>' . $unit_price_sale;
}
else
{
$group_price = $price;
$group_price = $group_price . $group_suffix;
$unit_price = $product->get_price() / $unit_divider;
$unit_price = wc_get_price_to_display( $product, array( 'price' => $unit_price ) );
$unit_price = $price = wc_price($unit_price) . $unit_suffix;
$price = $group_price . '<br>' . $unit_price;
}
}
return $price;
}
不过我只提供正常价格或促销价的标准产品。
我没有将其扩展到分组或可变产品。
有几种方法可以实现这一点。一旦您通过更改这两行
将新价格附加到原始字符串,您上面发布的那个可能会起作用
$price = $group_price_sale . '<br>' . $unit_price_sale;
$price = $group_price . '<br>' . $unit_price;
到
$price .= $group_price_sale . '<br>' . $unit_price_sale;
$price .= $group_price . '<br>' . $unit_price;
另一种方法是挂钩价格后缀函数:
function so1664798_add_bottle_price_suffix( $html, $product, $price, $qty ){
$bottleprice = $price / 6;
$html .= ' ('.$bottleprice .' per bottle)';
return $html;
}
add_filter( 'woocommerce_get_price_suffix', 'so1664798_add_bottle_price_suffix', 99, 4 );
或者,如果您希望在单个产品页面上显示每瓶价格,您可以使用此代码(我将其用于每升价格信息)挂钩:
function so1664798_add_bottle_price() {
global $product;
$price = $product->get_price();
$price_per_bottle = $price / 6;
echo '<span class="price-unit smaller">'.number_format((float)$price_per_bottle, 2, wc_get_price_decimal_separator(), '').get_woocommerce_currency_symbol().' / '.__('Bottle','txtdomain').', </span>';
}
add_action('woocommerce_single_product_summary','so1664798_add_bottle_price_summary',10);
如果您想避免在其他几个地方(结帐、购物车等)显示您的瓶子价格,但只想在产品页面上显示,最后一个选项将是最安全的。
我重新审视并简化了代码(仅适用于单个产品):
add_filter( 'woocommerce_get_price_html', 'custom_product_price_html', 10, 2 );
function custom_product_price_html( $price, $product ) {
// For simple products only
if ( $product->is_type('simple') ) {
$unit_divider = 6;
$suffix_box = ' '. __('(per box)', 'woocommerce');
$suffix_unit = ' '. __('(per bottle)', 'woocommerce');
$active_price_unit = wc_get_price_to_display( $product, array( 'price' => ( $product->get_price() / $unit_divider ) ) );
if($product->is_on_sale() )
{
$regular_price_unit = wc_get_price_to_display( $product, array( 'price' => ( $product->get_regular_price() / $unit_divider ) ) );
$formatted_price_unit = wc_format_sale_price( $regular_price_unit, $active_price_unit );
$price .= $suffix_box . '<br><span class="unit-price">' . $formatted_price_unit . $suffix_unit . '</span>';
}
else
{
$price .= $suffix_box . '<br><span class="unit-price">' . wc_price($active_price_unit) . $suffix_unit . '</span>';
}
}
return $price;
}
代码进入您的活动子主题(或主题)的 function.php 文件。已测试并有效。
相关:
我使用 Woocommerce 每箱销售 6 瓶葡萄酒。 所以在设置我的产品时,我自然会输入每盒的价格。 不过,我确实希望用户也能看到每瓶的价格。
$120/盒
20 美元/瓶
我尝试使用
下面经过编辑的代码段显示了原始 $price 和单位 $price 以及 group/unit 指标(对于简单产品):
add_filter( 'woocommerce_get_price_html', 'unit_product_price_on_archives', 10, 2 );
function unit_product_price_on_archives( $price, $product ) {
if ( is_product() || is_product_category() || is_product_tag() ) {
$unit_divider = 6;
$group_suffix = ' '. __('(per box)', 'woocommerce');
$unit_suffix = ' '. __('(per bottle)', 'woocommerce');
if( $product->is_on_sale() )
{
$regular_price_unit = $product->get_regular_price() / $unit_divider;
$regular_price_unit = wc_get_price_to_display( $product, array( 'price' => $regular_price_unit ) );
$regular_price_group = $product->get_regular_price();
$regular_price_group = wc_get_price_to_display( $product, array( 'price' => $regular_price_group ) );
$group_price_sale = $product->get_sale_price();
$group_price_sale = wc_get_price_to_display( $product, array( 'price' => $group_price_sale ) );
$group_price_sale = wc_format_sale_price( $regular_price_group, $group_price_sale ) . $group_suffix;
$unit_price_sale = $product->get_sale_price() / $unit_divider;
$unit_price_sale = wc_get_price_to_display( $product, array( 'price' => $unit_price_sale ) );
$unit_price_sale = wc_format_sale_price( $regular_price_unit, $unit_price_sale ) . $unit_suffix;
$price = $group_price_sale . '<br>' . $unit_price_sale;
}
else
{
$group_price = $price;
$group_price = $group_price . $group_suffix;
$unit_price = $product->get_price() / $unit_divider;
$unit_price = wc_get_price_to_display( $product, array( 'price' => $unit_price ) );
$unit_price = $price = wc_price($unit_price) . $unit_suffix;
$price = $group_price . '<br>' . $unit_price;
}
}
return $price;
}
不过我只提供正常价格或促销价的标准产品。
我没有将其扩展到分组或可变产品。
有几种方法可以实现这一点。一旦您通过更改这两行
将新价格附加到原始字符串,您上面发布的那个可能会起作用$price = $group_price_sale . '<br>' . $unit_price_sale;
$price = $group_price . '<br>' . $unit_price;
到
$price .= $group_price_sale . '<br>' . $unit_price_sale;
$price .= $group_price . '<br>' . $unit_price;
另一种方法是挂钩价格后缀函数:
function so1664798_add_bottle_price_suffix( $html, $product, $price, $qty ){
$bottleprice = $price / 6;
$html .= ' ('.$bottleprice .' per bottle)';
return $html;
}
add_filter( 'woocommerce_get_price_suffix', 'so1664798_add_bottle_price_suffix', 99, 4 );
或者,如果您希望在单个产品页面上显示每瓶价格,您可以使用此代码(我将其用于每升价格信息)挂钩:
function so1664798_add_bottle_price() {
global $product;
$price = $product->get_price();
$price_per_bottle = $price / 6;
echo '<span class="price-unit smaller">'.number_format((float)$price_per_bottle, 2, wc_get_price_decimal_separator(), '').get_woocommerce_currency_symbol().' / '.__('Bottle','txtdomain').', </span>';
}
add_action('woocommerce_single_product_summary','so1664798_add_bottle_price_summary',10);
如果您想避免在其他几个地方(结帐、购物车等)显示您的瓶子价格,但只想在产品页面上显示,最后一个选项将是最安全的。
我重新审视并简化了代码(仅适用于单个产品):
add_filter( 'woocommerce_get_price_html', 'custom_product_price_html', 10, 2 );
function custom_product_price_html( $price, $product ) {
// For simple products only
if ( $product->is_type('simple') ) {
$unit_divider = 6;
$suffix_box = ' '. __('(per box)', 'woocommerce');
$suffix_unit = ' '. __('(per bottle)', 'woocommerce');
$active_price_unit = wc_get_price_to_display( $product, array( 'price' => ( $product->get_price() / $unit_divider ) ) );
if($product->is_on_sale() )
{
$regular_price_unit = wc_get_price_to_display( $product, array( 'price' => ( $product->get_regular_price() / $unit_divider ) ) );
$formatted_price_unit = wc_format_sale_price( $regular_price_unit, $active_price_unit );
$price .= $suffix_box . '<br><span class="unit-price">' . $formatted_price_unit . $suffix_unit . '</span>';
}
else
{
$price .= $suffix_box . '<br><span class="unit-price">' . wc_price($active_price_unit) . $suffix_unit . '</span>';
}
}
return $price;
}
代码进入您的活动子主题(或主题)的 function.php 文件。已测试并有效。
相关: