2017-08-13 13 views
3

J'ai besoin d'obtenir tous les ID de variation et mettre à jour le prix en boucle. requête simple et boucle ressemble:Mise à jour toutes les variations des prix d'un produit variable dans 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); 
} 

Je ne pense pas travailler ceci:

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

ou ceci:

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

I en utilisant ce code dans fuction.php dans auj Fonction myprefix_function_to_run(). Cette fonction appelée dans cron_schedules hook. Cette mise à jour des données tous les jours. –

+1

Il existe des méta-données post telles que la curency. Une fois par jour, le prix du produit devrait être actualisé en utilisant les taux de change. Maintenant j'essaye juste de mettre à jour toutes les variations de prix, dans les produits simle cela fonctionne. –

Répondre

1

d'abord dans votre code ou doit être remplacé par '. Aussi, si utilisé $post-ID devrait être remplacé par $post->ID

Selon et comment vous utilisez ce code, vous devriez essayer d'inclure global $post; premier à être en mesure d'utiliser l'objet WP_Post$post.

Ensuite, vous pouvez essayer d'utiliser cette version personnalisée de votre code à la place:

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); 
} 

Ce code est testé sur la version WooCommerce 3+ et fonctionne

+1

votre code fonctionne parfaitement. Merci beaucoup –

+0

@KatiaKovtun Très heureux pour vous qui travaille sur le crochet 'cron_schedules' ... Merci. – LoicTheAztec