批量更新Woocommerce变化价格

时间:2016-05-11 21:20:15

标签: php mysql wordpress woocommerce

我正在尝试使用wordpress之外的php / mysql脚本更新woocommerce变化价格。

我有一个脚本可以更新_price表中_regular_price的一个product_variation的{​​{1}}和product值。

如果我有 多个 变体,则会在网页上显示变化的正确价格 - 但价格/价格范围来自woocommerce的价格。 php没有更新。

但是,如果我只有 这一 变体,则表格中的价格会更新,但在呈现的网页上根本不会更新。

我还尝试编辑wp_postmeta本身的价格。但是:我仍然在渲染的网页上得到旧价格。

基本上我现在在这些领域有相同的新价格:

产品变化中的

- > postmeta product

产品 - > postmeta _price, _regular_price

我找不到任何其他价格的字段 - 我被卡住了......

我错过了什么吗?还有其他表格/字段需要更新吗?

感谢您的帮助!

- 编辑 -

也许这会有所帮助:显然,当只有一个变体时,我的价格会使用_price, _regular_price, _min_variation_price, _max_variation_price, _min_variation_regular_price, _max_variation_regular_price代替echo $product->get_price_html();。那么echo $value['price_html'];中使用的价格在哪里存储?

2 个答案:

答案 0 :(得分:0)

好好经过一些挖掘,感谢@helgatheviking指出我正确的方向,我试过这个:

  1. 在脚本中包含了wp-load.php
  2. 名为WC_Product_Variable::sync( $post_id );
  3. - >不幸的是,这对我没有用。我只是把它放在这里因为我认为这是正确的方法 - 希望它能帮助其他人。

    实际帮助我的是在我的functions.php中包含这个:

    // Display Price For Variable Product With Same Variations Prices
    add_filter('woocommerce_available_variation', function ($value, $object = null, $variation = null) {
        if ($value['price_html'] == '') {
            $value['price_html'] = '<span class="price">' . $variation->get_price_html() . '</span>';
        }
        return $value;
    }, 10, 3);
    
    // Hook into price html
    add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
    function wpa83367_price_html( $price, $product ){
        WC_Product_Variable::sync( $product->id );
        $myPrice = $product->min_variation_price;
        $priceFormat = str_replace(utf8_encode('.'), ",", $myPrice);
        return '<span class="amount">from ' . $priceFormat . ' €</span>';
    }
    

答案 1 :(得分:0)

请使用以下脚本批量更新产品版本。 点击此处查看完整代码。 https://www.pearlbells.co.uk/bulk-update-product-variation-price-woocommerce/

function getExistingProducts($updatedPrices,$skuArray) {

$loop = new WP_Query(array('post_type' => array('product', 'product_variation'), 'posts_per_page' => -1));

while ($loop->have_posts()) : $loop->the_post();

    $id = get_the_ID();
    $product = wc_get_product( $id );
    $sku = get_post_meta($id, '_sku', true);

    if( in_array( $sku, $skuArray  ) ) {

        $attributes = $product->get_attributes();
        $attributes['medium-quantity-price']['value'] = $updatedPrices[$sku][4];
        $attributes['low-quantity-price']['value'] = $updatedPrices[$sku][3];
     $attributes['v-low-quantity-price']['value'] = $updatedPrices[$sku][2];
        update_post_meta( $id,'_product_attributes',$attributes);
        echo ' Update Sku : '.$sku.' '.PHP_EOL;

    }

endwhile;

}