【问题标题】:How do I automatically set WooCommerce Product to draft if sold out如果售罄,如何自动将 WooCommerce 产品设置为草稿
【发布时间】:2016-02-25 03:22:37
【问题描述】:

我尝试在 Woocommerce 中使用“售罄时隐藏”选项。但我使用不同的插件来展示我的产品(GridFX Masonry Gallery),它仍然显示售罄​​的产品。当最后一件商品被购买并售罄时,有没有办法将产品更改为草稿?有sn-p可以做到这一点吗?

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    Maha Dev 之前的回答无效。

    在主题函数文件中,get_stock_quantity() 方法不存在,除非您使用 wc_get_product 调用产品数据。

    使用set_post_type会更改帖子的实际类型,而不是状态,您需要使用wp_update_post并设置帖子状态。

    这是我最终使用的代码:

    /*
    * Unpublish products after purchase
    */
    function lbb_unpublish_prod($order_id) {
    
        $order = new WC_Order( $order_id );
    
        $all_products = $order->get_items();
        foreach ($all_products as $product){
            $product_object = wc_get_product($product['product_id']);
                // This will only work if stock management has been enabled
            if( ! $product_object->get_stock_quantity() ) {
                wp_update_post(array(
                    'ID' => $product['product_id'],
                    'post_status' => 'draft'
                    ));
            }
    
        }
    }
    add_action( 'woocommerce_thankyou', 'lbb_unpublish_prod', 10, 1 );
    

    【讨论】:

      【解决方案2】:

      更好的方法是设置产品库存(在您的情况下为 1)。选择“隐藏缺货产品”。它将隐藏缺货的产品。但是,如果您真的想隐藏订购的产品,请参阅下面的代码:

      //functions.php    
      
      add_action( 'woocommerce_thankyou', 'your_func', 10, 1 );
      
          function your_func($order_id) {
      
              $order = new WC_Order( $order_id );
      
              $all_products = $order->get_items();
              foreach ($all_products as $product){
                  // This will only work if stock management has been enabled
                  if( ! $product->get_stock_quantity() )
                      set_post_type ($product['product_id'], 'draft');
              }
          }
      

      这将隐藏添加到购物车中以供订购的所有产品。您可以根据需要自定义此功能。

      【讨论】:

      • 您需要添加一个条件来检查订单中产品的数量是否为0,您的代码会将订单中的所有产品设置为草稿模式,即使它们的数量超过0
      • @AnandShah,欢迎您编辑我的代码或任何更好的建议?
      • 一种更优雅的方法是检查插件是否提供过滤器来修改检索到的产品,并使用它来过滤手头库存为 0 的产品。
      • 这行不通。您在产品循环之外,因此 get_stock_quantity() 方法不存在。您还更改了帖子类型而不是其状态,因此您的产品将从 woo 产品列表中消失(如果代码有效)。
      猜你喜欢
      • 2018-10-14
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2022-08-10
      相关资源
      最近更新 更多