About update product stock status function in WooC

2019-07-30 12:22发布

The deal is, I have to fix an error in a custom WooCommerce import plugin, which appeared after updating WC from 2.6 to 3.4.

It uses the 'wc_update_product_stock_status' function, and used to pass post (product) id and it's stock status as it is represented in DB ('instock' and 'outofstock', as a string). But nowadays, as I can see in the WooCommerce docs (https://docs.woocommerce.com/wc-apidocs/function-wc_update_product_stock_status.html) it accepts integer instead of string.

So, the question is - what are those integers for in/out of stock values (1/0 did not fit).

1条回答
家丑人穷心不美
2楼-- · 2019-07-30 12:58

If you look to the source code in wc_update_product_stock_status() function:

/**
 * Update a product's stock status.
 *
 * @param  int $product_id
 * @param  int $status
 */
function wc_update_product_stock_status( $product_id, $status ) {
    $product = wc_get_product( $product_id );
    if ( $product ) {
        $product->set_stock_status( $status );
        $product->save();
    }
}

It uses the WC_Product set_stock_status() Woocommerce 3 CRUD method which uses strings But not integers values:

/**
 * Set stock status.
 *
 * @param string $status New status.
 */
public function set_stock_status( $status = 'instock' ) {
    $valid_statuses = wc_get_product_stock_status_options();

    if ( isset( $valid_statuses[ $status ] ) ) {
        $this->set_prop( 'stock_status', $status );
    } else {
        $this->set_prop( 'stock_status', 'instock' );
    }
}

So it's an error in the comment usage in wc_update_product_stock_status() function.

It still uses: 'instock' and 'outofstock' status strings. the default value is 'instock'

The main difference is also that stock status is now handled as outofstock term for the custom taxonomy product_visibility

Before Woocommerce 3, stock status was handled as product meta data.

查看更多
登录 后发表回答