在Woocommerce单个产品页面中更改并保存产品价格

时间:2019-09-20 08:13:57

标签: php wordpress woocommerce product hook-woocommerce

我有此功能,当页面加载时会触发。它会检查发布类型是否为“产品”,在这种情况下,我需要更改产品价格并保存页面。

我工作正常,但是我需要知道如何设置新产品的价格。

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 个答案:

答案 0 :(得分:2)

已更新

首先,您没有为此使用正确的钩子,因为它需要在页面加载之前被触发。

尝试以下操作(对于简单产品):

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文件中。经过测试,可以正常工作。

答案 1 :(得分:0)

您可以尝试在代码中使用给定产品ID的代码块。

要更新正常价格:

CGImageRef cgimg = CGWindowListCreateImage(CGRectZero, kCGWindowListOptionIncludingWindow, (int)self.window.windowNumber, kCGWindowImageBoundsIgnoreFraming);
NSImage *image = [[NSImage alloc] initWithCGImage:cgimg size:viewRect.size];
NSData *imageData = [image TIFFRepresentation];
[imageData writeToFile:fName atomically:NO];

要更新售价:

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

更新-取决于您的评论:

如果它是简单产品:

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

如果是变体产品,请使用“ update_post_meta” 函数。

您还可以检查:

1-Woo-commerce 3.0 single product price is not changing properly

2-{{​​3}}