如何将缺货产品转移到垃圾 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中缺货产品的自动无索引

如何将变体库存状态添加到 Woocommerce 产品变体下拉列表

如果不在商店中,则隐藏产品变体 - WooCommerce

php 排序缺货WooCommerce产品

在 Woocommerce 中使用自定义元数据隐藏“缺货”产品