Hay momentos en que la configuración de edición de la página del producto no es suficiente. Sí, generalmente establece el precio regular y de venta a través de los campos de precios bajo «datos del producto»; Sin embargo, a veces es posible que tenga que anular esos precios a través del código, porque está ejecutando una promoción especial, no desea cambiar manualmente miles de precios o tal vez necesite mostrar diferentes valores a los clientes solo.
De cualquier manera, «configurar» el precio del producto consta de dos operaciones distintas. Primero, debe cambiar la «pantalla» del precio del producto en páginas individuales y de bucle; En segundo lugar, en realidad necesita establecer un precio de «artículo de carrito», porque el código anterior realmente no altera los valores de los precios.
Como de costumbre, más fácil de ser codificado que dicho, así que veamos cómo se hace. ¡Disfrutar!
Php Snippet: alterar el precio del producto programáticamente @ WooCommerce Frontend
Por ejemplo, en el fragmento a continuación cambiaremos el precio de una ID de producto solo si el usuario está iniciado y es un cliente registrado. Por supuesto, puede aplicar la misma estrategia a diferentes escenarios de casos, por ejemplo, los precios de cambio para una categoría de producto específica, aplicar un recargo a todos los productos por debajo de $ 10, y así sucesivamente. Las aplicaciones son infinitas.
Nota: Esto ahora es compatible con Simple y Variable productos.
/** * @snippet Alter Product Pricing Part 1 - WooCommerce Product * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @compatible WooCommerce 8 * @community https://businessbloomer.com/club/ */ add_filter( 'woocommerce_get_price_html', 'bbloomer_alter_price_display', 9999, 2 ); function bbloomer_alter_price_display( $price, $product ) { // ONLY ON FRONTEND if ( is_admin() ) return $price; // ONLY IF PRICE NOT NULL if ( '' === $product->get_price() ) return $price; // IF CUSTOMER LOGGED IN, APPLY 20% DISCOUNT if ( wc_current_user_has_role( 'customer' ) ) { if ( $product->is_type( 'simple' ) || $product->is_type( 'variation' ) ) { if ( $product->is_on_sale() ) { $price = wc_format_sale_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ) * 0.80, wc_get_price_to_display( $product ) * 0.80 ) . $product->get_price_suffix(); } else { $price = wc_price( wc_get_price_to_display( $product ) * 0.80 ) . $product->get_price_suffix(); } } elseif ( $product->is_type( 'variable' ) ) { $prices = $product->get_variation_prices( true ); if ( empty( $prices['price'] ) ) { $price = apply_filters( 'woocommerce_variable_empty_price_html', '', $product ); } else { $min_price = current( $prices['price'] ); $max_price = end( $prices['price'] ); $min_reg_price = current( $prices['regular_price'] ); $max_reg_price = end( $prices['regular_price'] ); if ( $min_price !== $max_price ) { $price = wc_format_price_range( $min_price * 0.80, $max_price * 0.80 ); } elseif ( $product->is_on_sale() && $min_reg_price === $max_reg_price ) { $price = wc_format_sale_price( wc_price( $max_reg_price * 0.80 ), wc_price( $min_price * 0.80 ) ); } else { $price = wc_price( $min_price * 0.80 ); } $price = apply_filters( 'woocommerce_variable_price_html', $price . $product->get_price_suffix(), $product ); } } } return $price; } /** * @snippet Alter Product Pricing Part 2 - WooCommerce Cart/Checkout * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @compatible WooCommerce 8 * @community https://businessbloomer.com/club/ */ add_action( 'woocommerce_before_calculate_totals', 'bbloomer_alter_price_cart', 9999 ); function bbloomer_alter_price_cart( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return; // IF CUSTOMER NOT LOGGED IN, DONT APPLY DISCOUNT if ( ! wc_current_user_has_role( 'customer' ) ) return; // LOOP THROUGH CART ITEMS & APPLY 20% DISCOUNT foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) { $product = $cart_item['data']; $price = $product->get_price(); $cart_item['data']->set_price( $price * 0.80 ); } }
Y aquí está la captura de pantalla del mismo producto, en el modo de salida. Esto muestra el precio del producto original ($ 34) según la configuración de WooCommerce. Se muestra para todos los usuarios no registrados y también para todos los usuarios registrados que no son «clientes»: