在Woocommerce简易产品中显示前缀价格和附加单价

时间:2020-07-23 12:34:17

标签: php wordpress woocommerce product price

使用Woocommerce,我每盒出售葡萄酒,一盒装6瓶。 因此,很自然地,我在设置产品时会输入每盒价格。 不过,我确实希望用户也能看到每瓶价格。

每盒$ 120

每瓶$ 20

我尝试使用 Display on shop pages the unit price and the wholesale price on product pages 答案代码。它完全符合我的要求,除了它会删除原始(每盒)价格。

下面经过编辑的代码段同时显示了原始价格和单价,以及组/单元指示器(对于简单产品):

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;
}

但是,我只满足常规价格或销售价格的标准产品。

我没有将其扩展到分组或可变产品。

2 个答案:

答案 0 :(得分:2)

我重新审视了代码并简化了(仅适用于单个产品)

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文件中。经过测试,可以正常工作。


相关:

答案 1 :(得分:0)

有几种方法可以实现此目的。通过更改这两行,将新价格附加到原始字符串后,上面发布的价格可能会起作用

$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').',&nbsp;</span>';
}
add_action('woocommerce_single_product_summary','so1664798_add_bottle_price_summary',10);

如果您希望避免在其他几个地方(结帐,购物车,...)显示瓶装价格,而只希望在产品页面上显示,则最后一种选择是最安全的选择。

相关问题