2017-08-13 196 views
3

我需要獲取所有變化ID並更新循環中的價格。 簡單的查詢和循環如下所示:更新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;). 
+0

我在機能的研究 使用此代碼在fuction.php工作函數myprefix_function_to_run()。這個函數在cron_schedules鉤子中調用。此數據每天更新。 –

+1

還有一些後期元數據像curency。每天一次的產品價格應使用匯率進行更新。現在我嘗試更新所有變體價格,在它的作品中使用。 –

回答

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+和

+1

你的代碼完美地工作。非常感謝你 –

+0

@KatiaKovtun非常高興你正在研究'cron_schedules' hook ...謝謝。 – LoicTheAztec

相關問題