2017-02-10 55 views
3

在WooCommerce产品单页上,如果产品拥有销售价格,则将正常价格划掉,并在其后面突出显示销售价格。在产品销售时向价格添加自定义文本标签

我的问题:
我怎么可以添加像"Old Price: XX Dollar""New Price: XX Dollar",而不是一个标签只划掉,新价格(销售价格)?

+0

可能是这样的回答可以帮助你。 http://stackoverflow.com/a/41410818/5019802。你有没有简单的产品? –

回答

5

更新2(适用于简单和变型产品+解决了在同一变化价格的bug)

当产品都在打折,你可以添加自定义标签,就像你想使用自定义函数在woocommerce_sale_price_htmlwoocommerce_variation_sale_price_html过滤器钩子钩住(适用于简单和变量产品。

对于最小/最大价格变量产品,我们需要一个不同的功能挂在woocommerce_variation_sale_price_html过滤钩。

这里是代码:

add_filter('woocommerce_variation_sale_price_html','sale_prices_custom_labels', 10, 2); 
add_filter('woocommerce_sale_price_html','sale_prices_custom_labels', 10, 2); 
function sale_prices_custom_labels($price, $product){ 
    if (isset($product->sale_price)) { 
     $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($product->regular_price). '</del> 
     <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($product->sale_price) . '</ins>'; 
    } 
    else 
    { 
     $price = '<ins class="highlight">'.woocommerce_price($product->regular_price).'</ins>'; 
    } 
    return $price; 
} 

add_filter('woocommerce_variable_sale_price_html', 'sale_prices_custom_labels_min_max', 20, 2); 
function sale_prices_custom_labels_min_max($price, $product) { 

    $variation_min_reg_price = $product->get_variation_regular_price('min', true); 
    $variation_max_reg_price = $product->get_variation_regular_price('max', true); 
    $variation_min_sale_price = $product->get_variation_sale_price('min', true); 
    $variation_max_sale_price = $product->get_variation_sale_price('max', true); 

    if ($variation_min_reg_price != $variation_min_sale_price || $variation_max_reg_price != $variation_max_sale_price) 
    { 
     if($variation_min_reg_price == $variation_max_reg_price && $variation_min_sale_price == $variation_max_sale_price){ 
      $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_max_reg_price) . '</del> 
      <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
     elseif($variation_min_reg_price != $variation_max_reg_price && $variation_min_sale_price == $variation_max_sale_price) 
     { 
      $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_min_reg_price) . '-' . woocommerce_price($variation_max_reg_price) . '</del> 
      <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
     elseif($variation_min_reg_price == $variation_max_reg_price && $variation_min_sale_price != $variation_max_sale_price) 
     { 
      $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_max_reg_price) . '</del> 
      <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_min_sale_price) . '-' . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
     else 
     { 
     $price = '<del class="strike">' . __('Old Price: ', 'woocommerce') . woocommerce_price($variation_min_reg_price) . '-' . woocommerce_price($variation_max_reg_price) . '</del> 
     <ins class="highlight">' . __('New Price: ', 'woocommerce') . woocommerce_price($variation_min_sale_price) . '-' . woocommerce_price($variation_max_sale_price) . '</ins>'; 
     } 
    } 
    return $price; 
} 

也可以代替别的东西正常<ins><del> HTML标签和更改或添加一些类太(如果是你更方便)。 在这一点上,永恒是可能的。

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

此代码已经过测试并可正常工作。


相关答案:Conditional custom output around products sale price and regular price

+0

工作得很好!但在一种情况下,它不起作用......如果某产品在销售中,并且也可用于产品变体(例如以不同的颜色),则此功能无效。你有任何解决方案吗? – user6573193

+1

@ user6573193将两种产品类型(简单和可变产品)的功能测试和工作代码更新为我的答案 – LoicTheAztec

+0

谢谢!我提出了答案!我发现了一个小错误...如果产品差异在每个变体中花费相同,标签是“新价格:130-130美元” - 您有任何解决方案吗? – user6573193

0

在管理方面你需要定义你的销售价格和实际价格,所以它会自动反映在你的旧价格和新价格的前面。

此外,你需要为此做一些代码。

+0

这是正确的,我知道...但我想要一个标有“旧价格:100美元” - “新价格:90美元”两个价格的标签 而不是“-100美元 - 90美元” – user6573193

+0

您需要在旧的价格和新的价格之前添加代码:) –

+0

我知道...这就是我为什么要问这里的原因...这个过滤器怎么样?在这种情况下,我不想写在模板中。 – user6573193

相关问题