无法在WooCommerce中更改产品名称和属性

时间:2020-01-21 11:58:51

标签: php wordpress woocommerce product

我创建了一个简单的插件,可以从CSV文件导入产品,效果很好。创建新产品的功能如下所示(简化):

function create_products() {

    foreach($keys as $key) {

        // Assign variables
        // ...

        // Create new product
        $objProduct = new WC_Product();

        $objProduct->set_name($title);
        $objProduct->set_status("publish");
        $objProduct->set_catalog_visibility('visible');
        $objProduct->set_price($price);
        $objProduct->set_regular_price($price);
        $objProduct->set_manage_stock(true);
        $objProduct->set_stock_quantity($stock);
        $objProduct->set_stock_status('instock');
        $objProduct->set_backorders('notify');
        $objProduct->set_reviews_allowed(true);
        $objProduct->set_sold_individually(false);
        $objProduct->set_sku($sku);

        // Save it
        $product_id = $objProduct->save();

    }
}

效果很好。之后,我还有另一个功能,可以更新已经存在的产品的标题,价格,SKU和库存数量。看起来像这样(再次简化):

function update_products() {

    foreach($keys as $key) {

        // Get product ID and it's object
        // $id, $objProduct

        // Assign variables
        // $title, $stock, $price, $sku

        // Perform updates
        update_stock($id, $stock); // updates '_stock' and '_stock_status' meta, runs wp_update_product_stock() method
        update_post_meta($id, '_regular_price', (float)$price);
        $objProduct->set_sku($sku);
        $objProduct->set_name($title);
        $objProduct->save();
    }
}

但是它根本不起作用。不知何故,SKU(用set_sku()更新)和库存更新有效。它得到更新,但其余(名称和价格)没有更新。至于标题,我也尝试过wp_update_post()方法,并尝试更改'post_title',但也没有结果。

它们都是简单产品。如何更新其标题,价格和股票价值?

1 个答案:

答案 0 :(得分:0)

请尝试以下代码。我检查它工作正常。

function update_products() {

    foreach($keys as $key) {

        // Get product ID and it's object
        // $id, $objProduct

        // Assign variables
        // $title, $stock, $price, $sku

        // Perform updates
        // Create new product
        $objProduct = wc_get_product($id);
        if ( $objProduct instanceof WC_Product) {
            $objProduct->set_name($title);
            $objProduct->set_regular_price($price);
            $objProduct->set_sku($sku);
            $objProduct->set_stock_quantity($stock);

            // Save it
            $objProduct->save();
        }
    }
}

希望可以帮助您。检查产品是否存在。