Невозможно изменить название продукта и атрибуты в WooCommerce - PullRequest
1 голос
/ 21 января 2020

Я создал простой плагин, который импортирует продукты из моего 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();

    }
}

Работает хорошо. После этого у меня есть еще одна функция, которая просто обновляет название, цену, артикул и количество товара на складе, которое уже существует. Это выглядит так (опять же, упрощенно):

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 голосов
/ 21 января 2020

Попробуйте код ниже. Я проверил, что все работает нормально.

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();
        }
    }
}

Надеюсь, вам поможет. Проверьте, существует ли продукт.

...