php - Cambiar los precios de los productos a través de un gancho en WooCommerce 3
wordpress price (1)
Actualización 3 (septiembre de 2018)
- 2 versiones de código para temas y complementos (también funciona en Woocommerce 3.3.x)
- Precios de variaciones en caché en Woocommerce 3 (actualización y adición) :
Ahora usandowoocommerce_get_variation_prices_hash
filter hook es mucho más eficiente, en lugar dewc_delete_product_transients()
... Ver este hilo relacionado
1) Versión de complemento con una función de constructor:
Los ganchos que está utilizando están en desuso en WooCommerce 3+
Para que funcione para todos los precios de los productos, incluidos los precios de variaciones , debe usar esto:
## 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 );
// Handling price caching (see explanations at the end)
add_filter( ''woocommerce_get_variation_prices_hash'', array( $this, ''add_price_multiplier_to_variation_prices_hash'' ), 99, 1 );
## This goes outside the constructor ##
// Utility function to change the prices with a multiplier (number)
public function get_price_multiplier() {
return 2; // x2 for testing
}
public function custom_price( $price, $product ) {
return $price * get_price_multiplier();
}
public function custom_variable_price( $price, $variation, $product ) {
return $price * get_price_multiplier();
}
public function add_price_multiplier_to_variation_prices_hash( $hash ) {
$hash[] = get_price_multiplier();
return $hash;
}
El código probado y funciona perfectamente (solo) en WooCommerce 3+.
2) Para la versión del tema:
archivo
functions.php
en el tema secundario activo (o tema activo):
// Utility function to change the prices with a multiplier (number)
function get_price_multiplier() {
return 2; // x2 for testing
}
// 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 ) {
return $price * get_price_multiplier();
}
// 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 * get_price_multiplier();
}
// Handling price caching (see explanations at the end)
add_filter( ''woocommerce_get_variation_prices_hash'', ''add_price_multiplier_to_variation_prices_hash'', 99, 1 );
function add_price_multiplier_to_variation_prices_hash( $hash ) {
$hash[] = get_price_multiplier();
return $hash;
}
Probado y funciona en woocommerce 3+
Para los productos en venta tiene esos ganchos:
-
woocommerce_product_get_sale_price
(woocommerce_product_get_sale_price
simples, agrupados y externos) -
woocommerce_variation_prices_sale_price
(Productos variables (min-max)) -
woocommerce_product_variation_get_sale_price
(variaciones de productos)
Precios en caché y woocommerce 3:
Los 3 ganchos de filtro involucrados en las variaciones de precios en caché son:
-
woocommerce_variation_prices_price
-
woocommerce_variation_prices_regular_price
-
woocommerce_variation_prices_sale_price
Introducido en Woocommerce 3, el
woocommerce_get_variation_prices_hash
filtrowoocommerce_get_variation_prices_hash
permitirá actualizar las variaciones de los precios en caché de una manera mucho más eficiente , sin eliminar los transitorios relacionados cada vez que se ejecutan estos enlaces.
Por lo tanto, las actuaciones se mantendrán impulsadas (gracias a Matthew Clark que señaló esta mejor manera)
Ver: almacenamiento en caché y precios dinámicos: próximos cambios en el método get_variation_prices
EN WooCommerce, necesito multiplicar todos los precios de los productos por un número. Así que he usado lo siguiente (a través de un complemento) :
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;
}
Pero eso no funciona para productos de variación. He intentado los siguientes ganchos sin suerte:
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);
El único que funciona a la mitad es este:
add_filter(''woocommerce_variation_prices_price'', array( $this, ''my_custom_price''), 99);
Pero eso solo cambió el precio general, no el precio de variación seleccionado. Vea la imagen a continuación, el precio es BsF. 200 y el precio general es correcto, 200 x 2 = 400, pero el precio de variación cuando se selecciona todavía muestra 200:
Nota: Necesito que cambie realmente, así que mostrar los ganchos html no funcionará.
¿Me falta algo o algo está mal?