【问题标题】:Replace displayed price by a text for out of stock WooCommerce products将显示的价格替换为缺货 WooCommerce 产品的文本
【发布时间】:2021-05-03 21:46:00
【问题描述】:

我不是专家,但我需要在我的 Woocommerce 产品页面中更改“out of stoke”产品的价格行程。

  1. 我发现如何将价格更改为“已售出”(并且有效)
//Change price to 'sold'
    
add_filter('woocommerce_product_get_price','change_price_regular_member', woocommerce_currency_symbols, 10, 2 );

function change_price_regular_member( $price, $product)
{
        if (!$product->is_in_stock())
            $price = "SOLD";
        return $price;
}
  1. 我试图隐藏我的货币符号(将 $SOLD 更改为 SOLD)
add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);
function change_existing_currency_symbol( $currency_symbol, $currency ) {
    global $post, $product;

    if (!$product->is_in_stock() ) {
        switch( $currency ) {
             case 'USD': $currency_symbol = ''; 
             break;
        }}
   
    return $currency_symbol; 
}

它不起作用

错误列表

Your PHP code changes were rolled back due to an error on line 66 of file wp-content/themes/pro-child/functions.php. Please fix and try saving again.

Uncaught Error: Call to a member function is_in_stock() on null in wp-content/themes/pro-child/functions.php:66
Stack trace:
#0 wp-includes/class-wp-hook.php(287): change_existing_currency_symbol('$', 'USD')
#1 wp-includes/plugin.php(212): WP_Hook->apply_filters('$', Array)
#2 wp-content/plugins/woocommerce/includes/wc-core-functions.php(854): apply_filters('woocommerce_cur...', '$', 'USD')
#3 wp-content/plugins/woocommerce/includes/widgets/class-wc-widget-price-filter.php(45): get_woocommerce_currency_symbol()
#4 wp-includes/class-wp-widget-factory.php(61): WC_Widget_Price_Filter->__construct()
#5 wp-includes/widgets.php(115): WP_Widget_Factory->register('WC_Widget_Price...')
#6 wp-content/plugins/woocommerce/includes/wc-

你能帮帮我吗?怎么了?

【问题讨论】:

    标签: php wordpress woocommerce product hook-woocommerce


    【解决方案1】:

    改用woocommerce_get_price_html钩子如下(将替换格式化显示的价格和货币)

    add_filter('woocommerce_get_price_html', 'change_sold_out_product_price_html', 100, 2 );
    function change_sold_out_product_price_html( $price_html, $product ) {
        if ( ! $product->is_in_stock() ) {
            $price_html = __("SOLD", "woocommerce");
        }
        return $price_html;
    }
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。它应该更好地工作。


    与您的评论相关的补充:

    对于您的第二个代码 sn-p,请尝试以下操作:

    add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);
    function change_existing_currency_symbol( $currency_symbol, $currency ) {
        $product = wc_get_product( get_the_ID() );
    
        if ( is_a( $product, 'WC_Product' ) && $currency === 'USD' && ! $product->is_in_stock() ) {
            $currency_symbol = ''; 
        }
    
        return $currency_symbol; 
    }
    

    它应该可以工作。如果您想在产品缺货时使其适用于所有货币,请从 IF 声明中删除 && $currency === 'USD'

    【讨论】:

    • 谢谢 - 它在标准主题中完美运行(只需测试它),但不幸的是,我的情况并非如此。我使用带有 2 个单独的内部参数 {{dc:woocommerce:currency_symbol}} 和 {{dc:woocommerce:product_price}} 的“x 主题”第一个代码已更改(产品价格),所以我真的需要第二个代码来仅更改 Currency_sumbol出售的产品。可能你还有其他想法吗?
    • @EvgeniyKrasnoshlykov 我添加了一个附加项,以使您的第二个代码 sn-p 工作......试试看。如果这个答案回答了你的问题,你可以请accept回答,谢谢。
    • 非常感谢!!!你是我个人的英雄。效果很好
    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2015-03-14
    • 1970-01-01
    • 2017-11-24
    相关资源
    最近更新 更多