php - 从 Woocommerce 档案页面中隐藏价格为零或为空的产品
问题描述
我正在使用 Woocommerce 设置批发商店,但无法解决以下问题。
我想自动隐藏或删除所有价格设置为零或产品根本没有价格的产品!
我在网上冲浪,发现下面的代码应该完全符合我的需要,但我把它放在我的子主题 functions.php 文件中,它对我不起作用!
在 WooCommerce 中隐藏价格设置为零的产品
add_action( 'woocommerce_product_query', 'react2wp_hide_products_higher_than_zero' );
function react2wp_hide_products_higher_than_zero( $q ){
$meta_query = $q->get( 'meta_query' );
$meta_query[] = array(
'key' => '_price',
'value' => 0,
'compare' => '>'
);
$q->set( 'meta_query', $meta_query );
}
在 WooCommerce 中隐藏没有价格的产品
add_action( 'woocommerce_product_query', 'react2wp_hide_products_without_price' );
function react2wp_hide_products_without_price( $q ){
$meta_query = $q->get( 'meta_query' );
$meta_query[] = array(
'key' => '_price',
'value' => '',
'compare' => '!='
);
$q->set( 'meta_query', $meta_query );
}
来源 - https://react2wp.com/woocommerce-hide-products-without-price-simple-fix/
我正在使用 Woocommerce 3.4.5 和 Flatsome 主题(更改主题也没有帮助)
如何弄清楚为什么代码不起作用?
任何帮助表示赞赏。
解决方案
更新- 添加了自动移动到零价格或空价格的垃圾产品的附加功能
要将没有价格或价格为零的产品从存档页面隐藏为商店,请使用以下命令:
add_filter( 'woocommerce_product_query_meta_query', 'shop_only_instock_products', 10, 2 );
function shop_only_instock_products( $meta_query, $query ) {
// In frontend only
if( is_admin() ) return $meta_query;
$meta_query['relation'] = 'OR';
$meta_query[] = array(
'key' => '_price',
'value' => '',
'type' => 'numeric',
'compare' => '!='
);
$meta_query[] = array(
'key' => '_price',
'value' => 0,
'type' => 'numeric',
'compare' => '!='
);
return $meta_query;
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
但是使用类似你的第一个代码片段的东西会给出相同的结果(价格大于零):
add_filter( 'woocommerce_product_query_meta_query', 'shop_only_instock_products', 10, 2 );
function shop_only_instock_products( $meta_query, $query ) {
// In frontend only
if( is_admin() ) return $meta_query;
$meta_query[] = array(
'key' => '_price',
'value' => 0,
'type' => 'numeric',
'compare' => '>'
);
return $meta_query;
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
将价格为零或空的产品移至垃圾箱 (不删除它们)。
以下代码将使用非常简单的直接 SQL 查询将所有价格为零或空的产品的状态更新为。trash
每次需要时,您只需运行一次。
// Function that will add products to trash that have Zero price or no price
function auto_add_product_to_trash(){
global $wpdb;
$number_of_products_processed = $wpdb->query("
UPDATE {$wpdb->prefix}posts as a
JOIN {$wpdb->prefix}postmeta AS b ON a.ID = b.post_id
JOIN {$wpdb->prefix}postmeta AS c ON a.ID = c.post_id
SET a.post_status = 'trash'
WHERE a.post_status LIKE 'publish' AND a.post_type LIKE 'product'
AND b.meta_key LIKE '_price' AND c.meta_key LIKE '_sale_price'
AND ( b.meta_value LIKE '' OR b.meta_value LIKE '0' )
AND c.meta_value != '0'
");
// Return the number of products added to trash
return $number_of_products_processed;
}
// Execute the function - Run it just once and comment it
auto_add_product_to_trash();
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
现在,当您在后端访问您的产品时,所有零价格或空价格的产品都在垃圾箱中。您可以一一查看并轻松删除它们:
这样,一切都是安全的,因为您可以恢复添加到垃圾箱的任何产品。如果您恢复产品,您必须将其状态设置为已发布(恢复的产品获得“草稿”状态)
推荐阅读
- google-drive-api - 如何使用 Zapier 与特定电子邮件地址共享对 Google Drive 文件 ID 的权限?
- docker - 为什么“docker run -t”输出在命令输出中包含 \r?
- bots - RichEmbed 字段值可能不为空如何解决?
- c++ - 如何投射转发的参数包?
- php - Laravel 事务冲突
- c# - 在低分辨率图像中检测快速移动的球
- amazon-web-services - 如何在 Web 控制台上检查 AWS IoT 设备连接状态?
- javascript - 等待一个函数按顺序完成Javascript
- javascript - 在 JS 库中居中替代文本
- intellij-idea - PyCharm:限制缓存大小