如何将缺货产品转移到垃圾 Woocommerce?
Posted
技术标签:
【中文标题】如何将缺货产品转移到垃圾 Woocommerce?【英文标题】:How to move out of stock product to trash Woocommerce? 【发布时间】:2021-12-09 02:04:00 【问题描述】:有没有办法在一天结束时在 WooCommerce 中自动丢弃已售商品(缺货)?比如半夜?
由于许多公司营销产品和缺货商品/已售商品也在做广告。公司无法设法将它们从广告中删除。
在这种情况下,我们需要运行一个脚本,将缺货产品移至回收站。 由于我们有上千种产品,所以我们需要一个执行速度更快的代码 sn-p
【问题讨论】:
【参考方案1】:您将需要 cron 作业来自动化它。您始终可以安装 WP Control 插件,您可以在需要时从中运行事件。我的解决方案是使用 sql 请求收集缺货的产品 ID。我认为在性能方面这是最快的方法。
add_action('trash_outofstock_products', 'check_trash_outofstock_products');
// The action will trigger when someone visits your WordPress site
function trash_outofstock_products_activation()
if ( !wp_next_scheduled( 'trash_outofstock_products' ) )
wp_schedule_event( time(), 'daily', 'trash_outofstock_products');
add_action('wp', 'trash_outofstock_products_activation');
function check_trash_outofstock_products()
global $wpdb;
$results = $wpdb->get_results( "
SELECT p.ID, pm.meta_value as stock_status
FROM $wpdb->prefixposts as p
INNER JOIN $wpdb->prefixpostmeta as pm ON p.ID = pm.post_id
WHERE p.post_type LIKE 'product'
AND p.post_status LIKE 'publish'
AND pm.meta_key LIKE '_stock_status'
AND pm.meta_value LIKE 'outofstock'
GROUP BY p.ID
" );
foreach($results as $result)
wp_trash_post($result->ID);
【讨论】:
如果有像product_something
这样的自定义 post_type 会发生什么?它会将这些帖子移到垃圾箱
您考虑过数千种产品的执行时间吗?【参考方案2】:
您可以使用get_results
删除outofstock
产品。
function remove_out_of_stock_status()
global $wpdb;
$results = $wpdb->get_results( "
DELETE p FROM $wpdb->prefixposts p
join $wpdb->prefixpostmeta pm
on p.ID = pm.post_id
WHERE p.post_type = 'product'
and pm.meta_key = '_stock_status'
and pm.meta_value = 'outofstock'
" );
add_action( 'init', 'remove_out_of_stock_status', 10, 1 );
【讨论】:
您是否考虑过 wooocmmerce 中数千种产品使用此代码的执行时间? 是的,它会删除任意数量的产品。 不是产品问题,是执行超时问题。它不是关于删除,而是关于将产品移至垃圾箱。在这种情况下,产品将被永久删除【参考方案3】:对于这个问题,
我进行了分析,发现与 WP_Query
相比,使用 核心查询 执行速度更快我发现只需将 out of stock 产品的 post_status 更改为“trash”即可。
下面的代码每 12 小时执行一次,前提是网站正在运行。您可以根据需要更改时间范围。
在活动主题的functions.php中放入下面的代码sn-ps。
add_action('init', 'automatically_trash_sold_items_in_woocommerce_callback');
function automatically_trash_sold_items_in_woocommerce_callback()
// Get any existing copy of our transient data
if ( false === ( $automatically_trash_sold_items_in_woocommerce = get_transient( 'automatically_trash_sold_items_in_woocommerce' ) ) )
// It wasn't there, so regenerate the data and save the transient
global $wpdb;
$wpdb->query( "UPDATE $wpdb->posts P JOIN $wpdb->postmeta PM ON P.ID = PM.post_id SET P.post_status='trash' WHERE P.post_type='product' and PM.meta_key='_stock_status' AND PM.meta_value='outofstock'");
set_transient( 'automatically_trash_sold_items_in_woocommerce', true, 12 * HOUR_IN_SECONDS );
【讨论】:
以上是关于如何将缺货产品转移到垃圾 Woocommerce?的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress Woocommerce 将所有产品更改为缺货
woocommerce wordpress中缺货产品的自动无索引