在 WooCommerce 中使用短代码将销售百分比添加到销售产品
Add sale percentage to products on sale with a shortcode in WooCommerce
我下面的代码创建了一个 shortcode,它将打印 variable 和 simple 的销售百分比] 产品,如果它正在销售。
此代码的问题是,对于 仅简单产品,当 产品未打折时,销售百分比显示为 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 =...
}
我下面的代码创建了一个 shortcode,它将打印 variable 和 simple 的销售百分比] 产品,如果它正在销售。
此代码的问题是,对于 仅简单产品,当 产品未打折时,销售百分比显示为 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 =...
}