当产品保存在 WooCommerce 后端时,以编程方式为库存状态分配标签

Assign a tag programatically for stock status when product is saved in WooCommerce backend

我创建了 3 个标签 1.

我希望根据可用性自动分配这些标签。

如果我能够完成这项工作,我将使用 woocommerce_admin_process_product_objectwoocommerce_product_quick_edit_savewoocommerce_product_set_stockwoocommerce_variation_set_stock 来捕捉库存的可能情况状态变化。

以下是我尝试过的方法,但它给了我一个致命错误。如果我不使用 if 条件,则会分配标签,但它不符合我的 objective。有什么建议吗?

add_action( 'woocommerce_admin_process_product_object', 'mycode_woocommerce_backorder_tag', 10, 2 );
function mycode_woocommerce_backorder_tag ($wc_get_product, $product) {
    if ($product->managing_stock() && $product->is_on_backorder(1)) {
        $wc_get_product->set_tag_ids(array(111));
        $wc_get_product->save();
        //wp_set_object_terms ($post_id, 'onbackorder', 'product_tag');
    }
}

woocommerce_admin_process_product_object 钩子只有 1 个参数,即 $product

$product->save(); 也不是必需的,因为这是自动发生的

复制自 admin/meta-boxes/class-wc-meta-box-product-data。php

/**
 * Set props before save.
 *
 * @since 3.0.0
 */
do_action( 'woocommerce_admin_process_product_object', $product );

$product->save();

所以要回答你的问题,你会得到:

// When product is saved in WooCommerce backend
function action_woocommerce_admin_process_product_object( $product ) {
    // managing_stock() - returns whether or not the product is stock managed.
    // on_backorder() – check if a product is on backorder.
    if ( $product->managing_stock() && $product->is_on_backorder(1) ) {
        // Product set tag ids
        $product->set_tag_ids( array( 111 ) );
    }
}
add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_admin_process_product_object', 10, 1 );