php - 在 Woocommerce 简单产品中显示前缀价格和附加单价
问题描述
使用 Woocommerce,我每盒出售 6 瓶酒。所以很自然地,我在设置我的产品时输入了每盒的价格。然而,我确实希望用户也能看到每瓶的价格。
120美元/盒
20美元/瓶
我尝试在商店页面上显示单价和产品页面上的批发价答案代码。它完全符合我的要求,除了它删除了原始(每盒)价格。
下面的编辑片段显示了原始 $price 和单位 $price 以及组/单位指示符(对于简单产品):
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;
}
然而,我确实只满足标准产品的正常价格或销售价格。
我没有将此扩展到分组或可变产品。
解决方案
我重新审视了代码并简化了它(仅适用于单个产品):
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 文件中。测试和工作。
有关的:
推荐阅读
- c++ - 将继承的模板类转换为父类
- java - 使用设置文本功能后,数组适配器不显示项目
- azure-storage - 写入单独容器时节流与完全单独的 ADLS Gen2 存储
- react-i18next - react-i18next 输出中的 HTML 注释
- css - 如何在 tsx css styled-components 中声明变量?
- c++ - C++ 根据运行时参数返回不同的派生模板类
- go - Google Translation API WithAPIKey 选项错误
- javascript - 将迭代对象作为输入传递给 html 内联定义的 onclick 函数
- unity3d - 为玩家 Unity 和 Photon 添加名称
- android - 在使用 Jetpack Compose 的导航组件时,由可组合项表示的弹出屏幕(从“回栈”)返回到上一个屏幕?