fbpx

Botón de llamada en productos sin venta de WooCommerce

Mejora la usabilidad de aquellos productos que no están disponibles para la venta con un snippet en tu plugin de funciones.

En una reciente personalización de una instalación de WooCommerce, el cliente necesitaba poder marcar productos específicos como «No disponible para la venta» en la ficha de creación del producto.

Además, los botones estándar de Agregar al carrito en las páginas de archive y en la página de tienda debían mostrar un texto personalizado de Llamar para consultar. Mientras que en la ficha de producto se debía mostrar el mensaje personalizado «Llámanos para solicitar más información: 900 000 000».

A continuación, vemos todos los pasos que debes seguir para que lo puedas configurarlo en tu instalación de WooCommerce.

¿Cómo añadir un botón de llamada para productos no adquiribles en WooCommerce?

Para añadir esta funcionalidad de productos no adquiribles y cambiar el comportamiento original de los botones de compra de WooCommerce, sólo tienes que añadir el siguiente código en tu plugin de funciones.

Paso 1

Lo primero es añadir el campo checkbox No disponible para la venta en la pestaña General de la ficha de datos del producto.

boton-de-llamada-en-productos-sin-venta-de-woocommerce-checkbox
El checkbox te permite activar o desactivar la opción en cada producto.
/* Agrega el campo 'No disponible para la venta' en la pestaña General de la ficha de datos del producto */

add_action( 'woocommerce_product_options_general_product_data', 'custom_general_product_data_custom_fields' );

function custom_general_product_data_custom_fields() {
    woocommerce_wp_checkbox(
        array(
            'id'            => '_no_disponible_para_venta',
            'wrapper_class' => 'show_if_simple',
            'label'         => __( 'No disponible para la venta', 'woocommerce' ),
            'description'   => __( '', 'woocommerce' )
            )
    );
}

Paso 2

Guardamos el estado del checkbox actualizando el valor de la meta key _no_disponible_para_venta del campo personalizado cuando se guarda o actualiza el producto.

/* Guarda los valores del campo personalizado */

add_action( 'woocommerce_process_product_meta', 'custom_save_general_proddata_custom_fields' );

function custom_save_general_proddata_custom_fields( $post_id ) {
    $woocommerce_checkbox = isset( $_POST['_no_disponible_para_venta'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_no_disponible_para_venta', $woocommerce_checkbox );
}

Paso 3

A continuación, marcamos los productos «No disponibles para la venta» como no adquiribles.

/* Marca los productos 'No disponible para la venta' como no adquiribles */

add_filter( 'woocommerce_is_purchasable', 'custom_woocommerce_set_purchasable' );

function custom_woocommerce_set_purchasable() {
    $no_disponible_para_venta = get_post_meta( get_the_ID(), '_no_disponible_para_venta', true );

    return ( 'yes' === $no_disponible_para_venta ? false : true );
}

Paso 4

Cambiamos el texto en los botones de productos no adquiribles (en las páginas de archive de WooCommerce) para para que muestre un botón Leer más en lugar de Comprar. Y luego, cambiamos el texto del botón para que muestre ‘Llamar para consultar’.

boton-de-llamada-en-productos-sin-venta-de-woocommerce-pagina-tienda
Al activar la opción, el botón se cambia en las páginas de archivo.
/* Cambia el texto de los botones en los productos no adquiribles */

add_filter( 'woocommerce_product_add_to_cart_text', 'custom_product_add_to_cart_text' );

function custom_product_add_to_cart_text() {
    $no_disponible_para_venta = get_post_meta( get_the_ID(), '_no_disponible_para_venta', true );

    if ( 'yes' === $no_disponible_para_venta ) {
        return __( 'Llamar para consultar', 'woocommerce' );
    } else {
        return __( 'Add to cart', 'woocommerce' );
    }
}

Paso 5

Por último, añadimos las instrucciones a mostrar en los productos no adquiribles dentro de la ficha de cada producto.

boton-de-llamada-en-productos-sin-venta-de-woocommerce-ficha-producto
Puedes personalizar el mensaje según lo que necesites.
/* Agrega instrucciones en la ficha de producto */

add_action( 'woocommerce_single_product_summary', 'custom_woocommerce_call_to_order_text', 30 );

function custom_woocommerce_call_to_order_text() {
    $no_disponible_para_venta = get_post_meta( get_the_ID(), '_no_disponible_para_venta', true );

    if ( 'yes' === $no_disponible_para_venta ) {
        echo '<div class="woocommerce-info">Llámanos para solicitar más información: <a href="tel:+34900000000">900 000 000</a></div>';
    }

}

¡Así de simple y así de fácil!

Como ves, es una solución que puede resultar de utilidad dependiendo del sector y de los productos que vendas en tu tienda online. Bastan unas pocas líneas de código en tu plugin de funciones para resolverlo de forma fácil y rápida. Además, haciéndolo así, cada vez aprenderás más sobre WooCommerce y la instalación de tu tienda online. Así que si tienes algunos productos que, por la razón que sea, no quieres que estén a la venta, pero que sí estén visibles… ¡Aquí tienes la solución que estabas buscando!

Si te ha gustado este tutorial, recuerda que si te suscribes, tendrás acceso a todo el contenido premium.

Y como siempre, si tienes cualquier problema, no dudes en contactar conmigo. Nos vemos en la próxima entrega, con un nuevo tutorial. 😉

Author avatar
Ángel Martín
Ayudo a emprendedores y empresas a digitalizar su negocio y sus procesos optimizando sus costes.