【问题标题】:Change the displayed price on shop and single product page for products with tag更改带有标签的产品在商店和单品页面上的显示价格
【发布时间】:2019-11-22 08:07:37
【问题描述】:

理想情况下,对所有具有给定标签的产品和变体应用 20% 的折扣,然后正确显示。

现在我有一个控制实际价格的插件,我正在尝试更改价格的视觉显示方式...

我想出了这个部分解决方案来改变商店和单品页面的显示价格。

任何人都可以清理这个吗?它会引发致命错误,但会产生预期的效果....希望更改商店和单个产品页面上具有给定标签的产品的显示价格。

2019-11-21T22:45:39+00:00 CRITICAL Uncaught Error: Call to a member function is_type() on null in */public_html/wp-content/themes/child/functions.php:325
Stack trace:
#0 */public_html/wp-includes/class-wp-hook.php(288): price_sale_comforter('<span class="wo...')
#1 */public_html/wp-includes/plugin.php(208): WP_Hook->apply_filters('<span class="wo...', Array)
#2 */public_html/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-product.php(1750): apply_filters('woocommerce_get...', '<span class="wo...', Object(WC_Product_Variation))
#6 */public_html/wp-content/themes/child/functions.php on line 325
function price_sale_comforter( $price ) {
    $product_tag_term = 'comforter';  // CHANGE TO PRODUCT TAG
    $original_price = '194.95'; // CHANGE TO ORIGINAL PRICE
    $new_price = '155.96'; // CHANGE TO NEW PRICE
    $percent_off = '20'; // CHANGE TO DISCOUNT PERCENT AMOUNT

    global $product;
    $product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
    if ( has_term( $product_tag_term , 'product_tag', $product_id ) ) {
        if ( $product) {
            if (is_shop()) {
                echo '<a href="'.get_permalink($product_id).'"class="ivpa_attribute ivpa_html">
                    <span class="price"><span class="woocommerce-Price-amount amount"><del><span class="woocommerce-Price-currencySymbol">$</span>'.$original_price.'</span></del> <ins><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>'.$new_price.' '.$percent_off.'% Off!</span></ins></span>
                    <span class="onsale">Sale!</span>
                    </a>';
            } //closing IF is_shop
        } //closing IF $product
        if (is_product()) {
            $price = '<span class="dynamic-sale-single-product"><del>' . $price .= '</del></span>';
            return $price;
        } // closing IF is_product
    } // closing IF has_term 
    else  {
        return $price;
    } // closing ELSE
} // closing function
add_filter( 'woocommerce_get_price_html', 'price_sale_comforter' );

【问题讨论】:

  • 您正在提供堆栈跟踪,但是否也有错误?
  • @snuwerd 是的,有一个错误,stackoverflow 格式删除了它,错误现在在帖子中可见

标签: wordpress woocommerce


【解决方案1】:

这里我无法测试代码,但我会从一个简单的开始

if (is_null($product)) return $price;

在这一行之后:

global $product;

【讨论】:

  • 感谢@Snuwerd 止血,不再出现错误。只是,现在在发送的一些电子邮件中,它仍然显示原始价格,但我几乎认为这是一个单独的问题。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多