Woocommerce - Cómo establecer el precio regular predeterminado del producto
Estoy usando WooCommerce en el trabajo para solicitudes de equipamiento, por lo tanto, todos los productos que crearé necesitarán tener un precio de £0. ¿Es posible establecer un valor predeterminado de 0 para el campo de precio regular en el formulario de agregar producto?
Gracias Jack
Podrías ejecutar una verificación en el hook save_post
, pero WooCommerce ya tiene un hook para procesar metadatos donde las comprobaciones de seguridad y tipo de publicación ya se han realizado. Así que usando su hook, solo verificas una cadena vacía en el precio regular y lo estableces en 0.
function wpa104760_default_price( $post_id, $post ) {
if ( isset( $_POST['_regular_price'] ) && trim( $_POST['_regular_price'] ) == '' ) {
update_post_meta( $post_id, '_regular_price', '0' );
}
}
add_action( 'woocommerce_process_product_meta', 'wpa104760_default_price' );
No estoy seguro de lo que estás intentando hacer con WooCommerce, pero tuve un cliente que usó http://a3rev.com/shop/woocommerce-quotes-and-orders/ para cambiar de una tienda normal con precio/carrito a un catálogo de "solicitud de cotización".
Edición: Mientras que lo anterior guardará un 0 como precio cada vez que se cree/actualice un producto, lo siguiente permitirá que un producto sea comprable independientemente del precio:
add_filter('woocommerce_is_purchasable', '__return_TRUE');
Para eliminar completamente el "flash" de oferta, simplemente desconéctalo de su action hook:
function woocommerce_remove_stuff(){
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
}
add_action('woocommerce_before_single_product', 'woocommerce_remove_stuff');

Gracias por tu respuesta. He probado la función anterior pero no parece permitir que el producto se agregue al carrito. Estoy intentando crear un sistema de solicitud de equipos donde los usuarios registrados puedan agregar equipos (que no tienen precio) al carrito y realizar un "pedido" de estos artículos. Los usuarios son empleados de mi empresa y el equipo ya es propiedad de la compañía.

Pensé que un producto gratuito podría agregarse al carrito. También podrías intentar sobrescribir el filtro woocommerce_is_purchasable
para que siempre sea verdadero.

Cuando escribo manualmente 0 en el precio puedo agregarlo al carrito, pero usando la función anterior y dejándolo en blanco no muestra el botón de agregar al carrito aunque sí muestra el icono de oferta. ¿Cómo podría sobrescribir el filtro woocommerce_is_purchasable?

Mi código era para cuando creas y/o editas un producto y no completas el precio... así que un precio por defecto. Automáticamente establecerá el precio en 0 pero solo cuando guardes un producto. No afecta el front-end excepto por lo que se ve afectado por tener un precio cero. De nuevo, creo que woocommerce_is_purchasable
podría ser la solución.

add_filter('woocommerce_is_purchasable', 'woocommerce_is_always_purchasable');
function woocommerce_is_always_purchasable(){ return true; }

Gracias, lo anterior lo ha resuelto pero por alguna razón se muestra el icono de oferta. ¿Es posible desactivar completamente la función de oferta ya que es algo que no voy a utilizar?

Encontré la solución para este problema, esta función establece el precio regular y el precio de oferta del producto a 0 después de actualizar el producto:
function set_default_price( $post_id, $post ) {
if ( isset( $_POST['_regular_price'] ) && trim( $_POST['_regular_price'] ) == '' ) {
update_post_meta( $post_id, '_regular_price', '0' );
}
if ( isset( $_POST['_sale_price'] ) && trim( $_POST['_sale_price'] ) == '' ) {
update_post_meta( $post_id, '_sale_price', '0' );
}
}
add_action( 'woocommerce_process_product_meta', 'set_default_price' );
La siguiente línea de código hace que los nuevos productos sean comprables, puedes usar este código para productos nuevos:
add_filter('woocommerce_is_purchasable', '__return_TRUE');

En Woocommerce 3 puedes usar esto:
function NAME_default_price($product)
{
// Si el producto no tiene precio regular, establecerlo en 0
if (!$product->get_regular_price()) {
$product->set_regular_price('0');
}
}
// Añadir la acción para procesar el objeto producto en el admin
add_action('woocommerce_admin_process_product_object', 'NAME_default_price');
