如何将脱销产品转移到垃圾Woocommerce?



是否有一种方法可以自动将售出的物品(缺货)退回在WooCommerce工作一天之后呢?比如在午夜?

由于许多公司都在销售这些产品,而缺货的商品也在做广告。公司没法把它们从广告中去掉。

在这种情况下,我们需要运行一个脚本,将库存产品移到垃圾中。作为我们有上千种产品,所以我们需要一个执行速度更快的代码片段

对于这个问题,

我已经做了分析,发现使用核心查询WP_Query相比,执行速度更快

我发现只要改变postrongtatusfor缺货产品到垃圾

以下代码每12小时执行一次提供的网站是在行动。您可以根据需要更改时间范围。

将下面的代码片段放到活动主题的functions.php中。

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 );
}
}

您将需要cron作业来自动化它。你总是可以安装WP控制插件,从你可以运行事件,当你需要的时候。我的解决方案是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->prefix}posts as p
INNER JOIN {$wpdb->prefix}postmeta 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);
}
}

可以使用get_results删除outofstock产品

function remove_out_of_stock_status(){

global $wpdb;
$results = $wpdb->get_results( "
DELETE p FROM {$wpdb->prefix}posts p 
join {$wpdb->prefix}postmeta 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 );

最新更新