当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce中按产品ID用简短代码显示产品价格

宇文弘懿
2023-03-14

在WooCommerce中,我使用这个胎面的代码,用一个简短的代码显示定义的产品ID中的产品价格。但它并不真的像我想要的那样。代码如下:

function so_30165014_price_shortcode_callback( $atts ) {
$atts = shortcode_atts( array(
'id' => null,
), $atts, 'bartag' );

$html = '';

if( intval( $atts['id'] ) > 0 && function_exists( 'wc_get_product' ) ){
 $_product = wc_get_product( $atts['id'] );
 $number = number_format($_product->get_price(), 2, '.', ',');
 $html = "$" . $number;

 }
 return $html;
 }
 add_shortcode( 'woocommerce_price', 'so_30165014_price_shortcode_callback' );

我对php编码知识很差。但我看到另一个线程显示产品价格:

$_product->get_regular_price();
$_product->get_sale_price();
$_product->get_price();

我已经尝试将这些代码混合到大代码中,并替换了get_price()……它起作用了,但我想要的是显示价格的东西是这样的:

我需要在价格后面显示货币符号,像:37欧元(中间有空格),而不是像$37

我怎样才能使它以一种干净的正常方式工作?

共有1个答案

苏乐童
2023-03-14

已更新(考虑您的价格显示是否含税)

在Woocommerce中,已经有格式化价格函数wc_price()可以在代码中使用。你还需要得到销售价格…

要在有销售价格或没有销售价格的情况下使其工作,请尝试以下代码(注释):

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

        // Your price CSS styles
        $style1 = 'style="font-size:40px;color:#e79a99;font-weight:bold;"';
        $style2 = 'style="font-size:25px;color:#e79a99"';

        // Formatting price settings (for the wc_price() function)
        $args = array(
            'ex_tax_label'       => false,
            'currency'           => 'EUR',
            'decimal_separator'  => '.',
            'thousand_separator' => ' ',
            'decimals'           => 2,
            'price_format'       => '%2$s %1$s',
        );

        // Formatting html output
        if( ! empty( $sale_price ) && $sale_price != 0 && $sale_price < $regular_price )
            $html = "<del $style2>" . wc_price( $regular_price, $args ) . "</del> <ins $style1>" . wc_price( $sale_price, $args ) . "</ins>"; // Sale price is set
        else
            $html = "<ins $style1>" . wc_price( $price, $args ) . "</ins>"; // No sale price set
    }
    return $html;
 }
 add_shortcode( 'product_price', 'custom_price_shortcode_callback' );
[product_price id="37"]
 类似资料:
  • 我使用Woocommerce插件在wordpress中开发了购物车。我需要按产品价格在购物车订单中显示产品,请帮助我做到这一点 谢啦

  • 我已经实现了代码并使其工作,但现在唯一的问题是价格没有正确显示,没有注册逗号。 例如,我有一个价格显示为 当它应该显示为时

  • 我在我的WooCommerce 2.6.4商店上使用可变产品,我为同一产品的两种不同变体添加了不同的价格。当选择两个变体中的一个时,根本不显示任何价格。下面的div只是空的: 我希望预选的变异价格显示为默认,而非预选的变异价格应在选择时动态替换。几乎像这个演示,除了从一个预选的项目和价格应该显示为默认。

  • 基于"获取选定的变化价格在jQuery上WooCommerce可变产品"回答我最后一个问题的代码,此代码获取用户输入到产品选项,我试图使用这些值来计算显示给用户的价格,但我不能弄清楚。 除窗口警报消息上方的部分外,所有代码都有效。我也尝试在警告消息上方的php标记中添加一个过滤函数,但它显示了所有类型的错误。 是否可以使用javascript更改显示的价格? 这是我实际使用的代码: 任何帮助赞赏。

  • 我需要在自定义快捷码中显示全局$product。我正在尝试创建一个$product的手动布局,其中只包含“C类”产品。 所以在我的短代码中我声明 但我的函数返回空$产品 当我使用$woocommerce时,我会获取数据,但无法定位我的产品。 如何在自定义快捷码上获取所有产品,以手动显示和控制产品布局?