php - 将显示的价格替换为缺货 WooCommerce 产品的文本
问题描述
我不是专家,但我需要在我的 Woocommerce 产品页面中更改“失控”产品的价格行程。
- 我发现如何将价格更改为“已售出”(并且有效)
//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;
}
- 我试图隐藏我的货币符号(将 $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-
你能帮助我吗?怎么了?
解决方案
使用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 文件中。它应该更好地工作。
与您的评论相关的补充:
对于您的第二个代码片段,请尝试以下操作:
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;
}
它应该有效。如果您想在产品缺货时使其适用于所有货币, && $currency === 'USD'
请从IF
声明中删除
推荐阅读
- flutter - 如何在显示列表数据之前添加美元符号?
- python - Python Pillow 库错误:PermissionError: [Errno 13] Permission denied
- google-cloud-platform - 将虚拟磁盘导入 GCP 存储桶
- html - 更改 dragulaInput 的框方向
- python - Jupyter Notebook 中的数据框样式
- algorithm - 计算器表达式评估器 - 前缀与后缀表示法?
- kotlin - 赋值不是表达式,在此上下文中只允许使用表达式 --- 如何解决此错误
- css - 带有 vue 和 svg 的弯曲底部边框
- javascript - 单击 HTML 表单中的按钮添加和删除输入字段
- r - 如何在 R 中添加单独的数据以绘制图形