Установите цену продажи на Переменные продукты, не делая их на складе в Woocommerce - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующий код:

foreach ($loop->posts as $product) {
$currentPrice = get_post_meta($product->ID, '_regular_price', true);
update_post_meta( $product->ID, '_price', $currentPrice );
update_post_meta( $product->ID, '_regular_price', $currentPrice );  

delete_metadata('post', $product->ID, '_sale_price');
if(in_array($i, $random_product)) {
    $discount = rand(10,25) / 100;
    $salePrice = $discount * $currentPrice;
    $salePrice = ceil($currentPrice - $salePrice);
    if($salePrice == $currentPrice) {
        $salePrice = $currentPrice - 1;
    }
    if($currentPrice != '' || $currentPrice == '0') {
        update_post_meta($product->ID, '_sale_price', $salePrice);
        update_post_meta( $product->ID, '_price', $salePrice );
        echo "Sale Item $i / Product ID $product->ID / Current Price $currentPrice / Sale Price $salePrice \n"; 
    }
}
$i++;
}

По сути, я пытаюсь сделать так, чтобы каждый товар проходил через мой магазин, зацикливался на нем и, если он был в моем массиве (который представляет собой случайно сгенерированный массив идентификаторов товаров), должен выставить их на продажу и убедиться, что любой другой товар не продается.

Однако, когда я это делаю ... по какой-то причине все мои переменные продукты отображаются как недоступные, пока я не перехожу на страницу их продуктов и не нажимаю Варианты -> Установить статус -> В наличии

Я подумал, что буду умнее и поменяю его на управляемый запас и у меня в наличии будет 999 продуктов, но проблема все равно будет возникать.

Дело в том, что я не изменяю акцию только этой ценой ... однако именно этот код я запустил вручную, и это вызывает проблему.

Есть мысли?

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны попытаться использовать методы CRUD , недавно появившиеся после Woocommerce 3, вместо использования мета-функций WordPress.

Я также внес некоторые изменения в ваш код, но проверить это невозможно, так как код вашего вопроса неполон. Попробуйте что-то вроде следующего:

foreach ( $loop->posts as $post ) {
    // Get an instance of the product object
    $product = wc_get_product($post->ID);

    $changes = false;

    // Get product regular and sale prices
    $regular_price = $product->get_regular_price();
    $sale_price    = $product->get_sale_price();

    if( ! empty($sale_price) || $product->is_on_sale() ) {
        // Empty product sale price
        $product->set_sale_price('');

        // Set product active price back to regular price
        $product->set_price($regular_price);

        $changes = true;
    }

    if( in_array( $i, $random_product ) ) {
        // Calculate a ramdom sale price for the current ramdom product
        $discount_rate = (100 - rand(10, 25)) / 100;
        $sale_price    = ceil($discount_rate * $regular_price);

        // Set product active price and sale price
        $product->set_sale_price($sale_price);
        $product->set_price($sale_price);

        printf( __("Sale Item %s / Product ID %s / Current Price %s / Sale Price %s \n"),
        $i, $post->ID, wc_price($regular_price), wc_price($sale_price) );

        $changes = true;
    }
    $i++;

    if( $changes ){
        // Save the product data
        $product->save();
    }
}

Непроверенные

...