【问题标题】:How to move out of stock product to trash Woocommerce?如何将缺货产品转移到垃圾 Woocommerce?
【发布时间】:2021-12-09 02:04:00
【问题描述】:

有没有办法在一天结束时在 WooCommerce 中自动丢弃已售商品(缺货)?比如半夜?

由于许多公司营销产品和缺货商品/已售商品也在做广告。公司无法设法将它们从广告中删除。

在这种情况下,我们需要运行一个脚本,将缺货产品移至回收站。 由于我们有上千种产品,所以我们需要一个执行速度更快的代码 sn-p

【问题讨论】:

    标签: php wordpress woocommerce product


    【解决方案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->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);
        }
    }
    

    【讨论】:

    • 如果有像 product_something 这样的自定义 post_type 会发生什么?它会将这些帖子移到垃圾箱
    • 您考虑过数千种产品的执行时间吗?
    【解决方案2】:

    您可以使用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 );
    

    【讨论】:

    • 您是否考虑过 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 );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2022-10-09
      • 2015-05-12
      • 1970-01-01
      • 2021-08-31
      相关资源
      最近更新 更多