Modifica i prezzi dei prodotti tramite un hook in WooCommerce 3

IN WooCommerce, ho bisogno di moltiplicare tutti i prezzi dei prodotti di un numero. Quindi ho usato il seguente (tramite un plugin) :

add_filter('woocommerce_get_regular_price', array( $this, 'my_custom_price'), 99); add_filter('woocommerce_get_price', array( $this, 'my_custom_price'), 99); function my_custom_price( $original_price ) { global $post, $woocommerce; //Logic for calculating the new price here $new_price = $original_price * 2; //Return the new price (this is the price that will be used everywhere in the store) return $new_price; } 

Ma questo non funziona per i prodotti di variazione. Ho provato i seguenti ganci senza fortuna:

 add_filter('woocommerce_get_variation_regular_price', array( $this, 'my_custom_price'), 99); add_filter('woocommerce_get_variation_price', array( $this, 'my_custom_price'), 99); 

L’unico che funziona a metà è questo:

 add_filter('woocommerce_variation_prices_price', array( $this, 'my_custom_price'), 99); 

Ma questo ha solo cambiato il prezzo complessivo, non il prezzo di variazione selezionato. Guarda l’immagine qui sotto, il prezzo è BsF. 200 e il prezzo complessivo è giusto, 200 x 2 = 400, ma il prezzo di variazione quando selezionato mostra ancora 200:

Nota: ho bisogno che cambi effettivamente, quindi i ganci html non funzioneranno.

Prezzo di variazione

C’è qualcosa che mi manca o qualcosa che non va?

Aggiornato (2018) con 2 versioni (testato e funziona ancora anche in Woocommerce 3.3.x) :

1) Versione plugin con una funzione di costruzione:

Gli hook che stai utilizzando sono obsoleti in WooCommerce 3+

Per farlo funzionare per tutti i prezzi dei prodotti, inclusi i prezzi delle variazioni , dovresti usare questo:

 ## The following goes inside the constructor ## // Simple, grouped and external products add_filter('woocommerce_product_get_price', array( $this, 'custom_price' ), 99, 2 ); add_filter('woocommerce_product_get_regular_price', array( $this, 'custom_price' ), 99, 2 ); // Variations add_filter('woocommerce_product_variation_get_regular_price', array( $this, 'custom_price' ), 99, 2 ); add_filter('woocommerce_product_variation_get_price', array( $this, 'custom_price' ), 99, 2 ); // Variable (price range) add_filter('woocommerce_variation_prices_price', array( $this, 'custom_variable_price' ), 99, 3 ); add_filter('woocommerce_variation_prices_regular_price', array( $this, 'custom_variable_price' ), 99, 3 ); ## This goes outside the constructor ## public function custom_price( $price, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($product->get_id()); return $price * 2; // X2 for testing } public function custom_variable_price( $price, $variation, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($variation->get_id()); return $price * 2; // X2 for testing } 

Il codice è stato testato e funziona perfettamente (solo) in WooCommerce 3+.


2) Per la versione del tema: file functions.php sul tema figlio attivo (o tema attivo):

 // Simple, grouped and external products add_filter('woocommerce_product_get_price', 'custom_price', 99, 2 ); add_filter('woocommerce_product_get_regular_price', 'custom_price', 99, 2 ); // Variations add_filter('woocommerce_product_variation_get_regular_price', 'custom_price', 99, 2 ); add_filter('woocommerce_product_variation_get_price', 'custom_price', 99, 2 ); function custom_price( $price, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($product->get_id()); return $price * 2; // X2 for testing } // Variable (price range) add_filter('woocommerce_variation_prices_price', 'custom_variable_price', 99, 3 ); add_filter('woocommerce_variation_prices_regular_price', 'custom_variable_price', 99, 3 ); function custom_variable_price( $price, $variation, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($variation->get_id()); return $price * 2; // X2 for testing } 

Testato e funziona su woocommerce 3+


Per i prodotti in vendita hai quei ganci:

  • woocommerce_product_get_sale_price (prodotti semplici, raggruppati ed esterni)
  • woocommerce_variation_prices_sale_price (Prodotti variabili (min-max))
  • woocommerce_variation_prices_sale_price (variazioni di prodotti)