在 WooCommerce 中使用短代码将销售百分比添加到销售产品

Add sale percentage to products on sale with a shortcode in WooCommerce

我下面的代码创建了一个 shortcode,它将打印 variablesimple 的销售百分比] 产品,如果它正在销售。

此代码的问题是,对于 仅简单产品,当 产品未打折时,销售百分比显示为 100% OFF即未输入促销价

如果我设置了促销价,那么将产品设置为促销,显示的百分比是正确的。

问题仅限于未打折的简单产品。根本不应显示销售百分比。

add_shortcode( 'sale-percentage', 'add_percentage_to_sale_badge' );
function add_percentage_to_sale_badge() {
   global $product;
   if ( $product->is_type( 'variable' ) ) {
      $percentages = array(); // Get all variation prices
      $prices = $product->get_variation_prices(); // Loop through variation prices
      foreach ( $prices['price'] as $key => $price ) { // Only on sale variations
         if ( $prices['regular_price'][ $key ] !== $price ) {
            // Calculate and set in the array the percentage for each variation on sale
            $percentages[] = round( 100 - ( $prices['sale_price'][ $key ] / $prices['regular_price'][ $key ] * 100 ) );
         }
      }
      $percentage = $percentages ? max( $percentages ) . '% Off' : '';
   } else {
      $regular_price = (float) $product->get_regular_price();
      $sale_price = (float) $product->get_sale_price();
      $percentage = round( 100 - ( $sale_price / $regular_price * 100 ) ) . '% Off SIMPLE';
   }

   $percentage = $percentage ? esc_html__( '', 'woocommerce' ) . ' ' . $percentage : '';

   return $percentage;
}

您实际上已经在您的问题中找到了答案:

  • “当产品未打折时。即未输入促销价..”

如果不填写,则无法计算该数字,因此在计算百分比之前必须添加if条件。[​​=15=]

所以改变

$regular_price = (float) $product->get_regular_price();
$sale_price = (float) $product->get_sale_price();
$percentage = round( 100 - ( $sale_price / $regular_price * 100 ) ) . '% Off SIMPLE';

// Get regular price
$regular_price = (float) $product->get_regular_price();

// Get sale price
$sale_price = (float) $product->get_sale_price();

// Condition, isset 
if ( isset ( $regular_price ) && isset ( $sale_price ) ) {
    $percentage = round( 100 - ( $sale_price / $regular_price * 100 ) ) . '% Off SIMPLE';   
}
  • isset — 确定变量是否已声明且不同于 NULL

也可以使用,或者两者结合使用

  • empty — 判断一个变量是否为空

喜欢

// NOT empty
if ( ! empty ( $sale_price ) ) {
    // $percentage =...
}