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

Мне нужно получить все идентификаторы вариаций и обновить цену в цикле. Простой запрос и цикл выглядят так:

$params = array(
  ‘posts_per_page’ => -1,
  ‘post_type’ => ‘product_variation’,
  ‘post_parent’ => $product->get_id() // tried $post-ID
);
$variations = get_posts( $params );
foreach ( $variations as $variation ) {
  $variation_ID = $variation->ID; // tried $post-ID, $product->get_id()
  $regular_price=34;
  update_post_meta( $variation_ID, ‘_regular_price’, (float)$regular_price );
  update_post_meta( $variation_ID, ‘_price’, (float)$regular_price );
}

Я думаю, что это не работает:

(‘post_parent’ => $product->get_id()) 

или это:

($variation_ID = $variation->ID;). 

person Katia Kovtun    schedule 13.08.2017    source источник
comment
Я использую этот код в fuction.php в функции fuction myprefix_function_to_run (). Эта функция вызывается в хуке cron_schedules. Эти данные обновляются каждый день.   -  person Katia Kovtun    schedule 14.08.2017
comment
Есть некоторые метаданные поста, такие как curency. Раз в день цена товара должна обновляться с использованием обменного курса. Сейчас я стараюсь просто обновить все варианты цены, в простых продуктах это работает.   -  person Katia Kovtun    schedule 14.08.2017


Ответы (1)


Сначала в вашем коде или следует заменить на '. Также, если используется, $post-ID следует заменить на $post->ID

В зависимости от того, где и как вы используете этот код, вам следует сначала попытаться включить global $post;, чтобы иметь возможность использовать WP_Post объект $post.

Затем вы можете попробовать использовать эту настроенную версию вашего кода вместо этого:

global $post;

$regular_price = 13;

// Only for product post type
if( $post->post_type == 'product' )
    $product = wc_get_product( $post->ID ); // An instance of the WC_Product object

// Only for variable products
if( $product->is_type('variable') ){

    foreach( $product->get_available_variations() as $variation_values ){
        $variation_id = $variation_values['variation_id']; // variation id
        // Updating active price and regular price
        update_post_meta( $variation_id, '_regular_price', $regular_price );
        update_post_meta( $variation_id, '_price', $regular_price );
        wc_delete_product_transients( $variation_id ); // Clear/refresh the variation cache
    }
    // Clear/refresh the variable product cache
    wc_delete_product_transients( $post->ID );
}

Этот код протестирован на WooCommerce версии 3+ и работает.

person LoicTheAztec    schedule 14.08.2017
comment
@KatiaKovtun Очень приятно, что вы работаете над cron_schedules хук ... Спасибо. - person LoicTheAztec; 14.08.2017