Измените и сохраните цену продукта на страницах отдельных продуктов Woocommerce. - PullRequest
2 голосов
/ 20 сентября 2019

У меня есть эта функция, которая срабатывает при загрузке страницы.Он проверяет, что тип записи - «продукт», и в этом случае мне нужно изменить цену продукта и сохранить страницу.

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

function changeAndSave( $array ) { 

    $post_type = get_post_type();
    if ($post_type == "product"){

        /*GET THE PRODUCT*/
        global $product;
        $product_id=$product->id;

        /*GET CURRENT PRICE*/
        $currentPrice=$product->get_price_html();

        /*SET NEW PRICE*/
        /* HERE.... ¿¿ how do I set my new price */
        $newPrice = 100€;

        /*SAVE THE PRODUCT*/    
        $product = wc_get_product($product_id);
        $product->save();
    }
}; 

// add the action 
add_action( 'loop_start', 'changeAndSave', 10, 1 ); 

ОБНОВЛЕНИЕ: Я пробовал это, но не работает:

function changeAndSave( $array ) { 

    $post_type = get_post_type();
    if ($post_type == "product"){

        /*GET THE PRODUCT*/
        global $product;
        $product_id=$product->id;
        $product = wc_get_product($product_id);

        /*GET CURRENT PRICE*/
        $currentPrice=$product->get_price_html();

        /*SET NEW PRICE*/
        $newRegularPrice = 81;
        $product->set_regular_price($newRegularPrice);

        /*SAVE THE PRODUCT*/    
        $product->save();
    }
}; 

// add the action 
add_action( 'loop_start', 'changeAndSave', 10, 1 ); 

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Обновлено

Во-первых, вы не используете правый хук для этого, так как он требует запуска до загрузки страницы.

Попробуйте следующее (для простых продуктов):

add_action( 'template_redirect', 'change_and_save_product_price' );

function change_and_save_product_price() {
    if ( get_post_type() === "product" ){ // or use: is_product()
        // HERE your new product price
        $new_price = 100;

        // Get an instance of the WC_Product Object
        $product = wc_get_product( get_the_id() );

        if ( $product->is_type('simple') ) {
            // Get current price (if needed)
            // $price = $product->get_price();

            // Set the new price
            $product->set_regular_price( $new_price );
            $product->set_price( $new_price );

            // (optionally) reset sale price => uncomment below
            // $product->set_sale_price( false );

            // Save to database refresh refresh caches
            $product->save();
        }
    }
}

Код входит в файл functions.php вашей активной дочерней темы (или активной темы).Проверено и работает.

0 голосов
/ 20 сентября 2019

Вы можете попробовать эти блоки кода с указанными идентификаторами продуктов внутри вашего кода.

Чтобы обновить обычные цены:

update_post_meta($productID, '_regular_price', $newRegularPrice);

Чтобы обновить цены продажи:

update_post_meta($productID, '_sale_price', $newSalePrice);

Обновление - в зависимости от вашего комментария:

Если это простой продукт:

$product->set_regular_price( $newRegularPrice );
$product->set_price( $newRegularPrice );

Если это вариант продукта, используйте "update_post_meta" функция.

Также вы можете проверить:

1 - Цена одного продукта Woo-Commerce 3.0 не меняется должным образом

2 - Обновить все варианты цен на переменный продукт в Woocommerce

...