使用短代码显示产品价格,包括 WooCommerce 中的可变产品

我在 WooCommerce 优秀答案中使用按产品 ID 显示产品价格和短代码,通过短代码显示产品价格,但我需要一个解决方案,它也可以显示可变产品的价格范围。

价格范围应显示所有变体的最低可购买价格(常规或促销)到所有变体的最高可购买价格。它不需要显示促销价和常规价格的两个范围,只需一个范围显示您实际可以购买的价格,无论是促销价还是常规价。

例如:

  • 变化 1 - 价格 4.00

  • 变体 2 - 价格 4.00 促销价 3.00

  • 变化 3 - 价格 6.00 促销价 5.00

  • 变化 4 - 价格 8.00

以上应显示 3.00 - 8.00 的价格范围

代码目前处理单一产品的方式不需要改变,我只需要向其中添加可变产品。

我使用的确切代码如下:

function custom_price_shortcode_callback( $atts ) {


$atts = shortcode_atts( array(

    'id' => null,

), $atts, 'product_price' );


$html = '';


if( intval( $atts['id'] ) > 0 && function_exists( 'wc_get_product' ) ){

    // Get an instance of the WC_Product object

    $product = wc_get_product( intval( $atts['id'] ) );


    // Get the product prices

    $price         = wc_get_price_to_display( $product, array( 'price' => $product->get_price() ) ); // Get the active price

    $regular_price = wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ); // Get the regular price

    $sale_price    = wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) ); // Get the sale price


    // Formatting price settings (for the wc_price() function)

    $args = array(

        'ex_tax_label'       => false,

        'decimal_separator'  => '.',

        'thousand_separator' => ',',

        'decimals'           => 2,

        'price_format'       => '%1$s%2$s',

    );


    // Formatting html output

    if( ! empty( $sale_price ) && $sale_price != 0 && $sale_price < $regular_price )

        $html = "<br/><del>" . wc_price( $regular_price, $args ) . "</del> " . wc_price( $sale_price, $args ); // Sale price is set

    else

        $html = "<br/>" . wc_price( $price, $args ); // No sale price set

}

return $html;

也许可以从WooCommerce 可变产品价格前缀中合并这个答案?



HUWWW
浏览 195回答 2
2回答

慕田峪7331174

我正在使用以下解决方案,这与我的初衷并不完全相同,因为它没有显示可变产品的价格范围,而是实际显示“发件人”消息(可以更改),然后是单一价格。但是,它现在通过短代码适用于标准产品和可变产品,我需要的也是如此。function custom_price_shortcode_callback( $atts ) {$atts = shortcode_atts( array(&nbsp; &nbsp; 'id' => null,), $atts, 'product_price' );$html = '';if( intval( $atts['id'] ) > 0 && function_exists( 'wc_get_product' ) ){$product = wc_get_product( intval( $atts['id'] ) );if ( $product->is_type( 'variable' ) ){&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $prefix = sprintf('%s ', __('From','woocommerce'));&nbsp; &nbsp; &nbsp; &nbsp; $min_price_regular = $product->get_variation_regular_price( 'min', true );&nbsp; &nbsp; &nbsp; &nbsp; $min_price_sale&nbsp; &nbsp; = $product->get_variation_sale_price( 'min', true );&nbsp; &nbsp; &nbsp; &nbsp; $max_price = $product->get_variation_price( 'max', true );&nbsp; &nbsp; &nbsp; &nbsp; $min_price = $product->get_variation_price( 'min', true );&nbsp; &nbsp; $price = ( $min_price_sale == $min_price_regular ) ? wc_price( $min_price_regular ) : wc_price( $min_price_sale );&nbsp; &nbsp; return&nbsp;&nbsp; &nbsp; ( $min_price == $max_price ) ? sprintf('<br/>' . $price) : $html = sprintf('<br/><span class="from-price">%s%s</span>', $prefix, $price);}else{// Get the product prices$price&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= wc_get_price_to_display( $product, array( 'price' => $product->get_price() ) ); // Get the active price$regular_price = wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ); // Get the regular price$sale_price&nbsp; &nbsp; = wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) ); // Get the sale price// Formatting price settings (for the wc_price() function)$args = array(&nbsp; &nbsp; 'ex_tax_label'&nbsp; &nbsp; &nbsp; &nbsp;=> false,&nbsp; &nbsp; 'decimal_separator'&nbsp; => '.',&nbsp; &nbsp; 'thousand_separator' => ',',&nbsp; &nbsp; 'decimals'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=> 2,&nbsp; &nbsp; 'price_format'&nbsp; &nbsp; &nbsp; &nbsp;=> '%1$s%2$s',);// Formatting html outputif( ! empty( $sale_price ) && $sale_price != 0 && $sale_price < $regular_price )&nbsp; &nbsp; $html = "<br/><del>" . wc_price( $regular_price, $args ) . "</del> " . wc_price( $sale_price, $args ); // Sale price is setelse&nbsp; &nbsp; $html = "<br/>" . wc_price( $price, $args ); // No sale price set}}return $html;}&nbsp;add_shortcode( 'product_price', 'custom_price_shortcode_callback' );

江户川乱折腾

使用 Booster for woocommerce 插件。并将这个 [wcj_product_price] 简码放在任何你想要的地方。它将显示带有货币符号的简单或可变产品价格。而且这个插件对woommerce很有帮助。
打开App,查看更多内容
随时随地看视频慕课网APP