Soporte » Plugins y Hacks » WooCommerce » Cambiar boton de Agregar al carrito por Mas informacion

  • Resuelto rebu

    (@rebu)



    Buenos días estimados,

    Lo que quiero hacer es reemplazar el botón de Agregar al carrito de mi pagina de productos por uno que diga “Mas información” o “Leer mas” y que me lleve a el producto en especial para leer la información. Ya dentro del producto si tiene que estar el botón agregar al carrito.

    Desde ya muchas gracias.

    Saludos.

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 3 respuestas - 1 de 3 (de 3 total)
  • Hola,

    Sino me equivoco tienes que usar el filtro woocommerce_loop_add_to_cart_link para remplazar el link predeterminado por el link hacia el producto usando la condicional is_archive o is_post_type_archive( 'product ) para evitar que lo remplaces en otros lugares.

    Tambien seria importante que mirases si ese theme que usas ya modifica esa seccion.

    Saludos

    Muchas gracias por la orientación, lo que hice fue poner esto en functions y funciono perfecto:

    add_filter( 'woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2 );
    function replacing_add_to_cart_button( $button, $product  ) {
        $button_text = __("VER MAS", "woocommerce");
        $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';
    
        return $button;
    }

    Por si alguien le sirve.

    Saludos.

    • Esta respuesta fue modificada hace 1 semana, 2 días por  rebu.

    Hola,
    Te lo he modificado un poco:

    
    /**
     * Replace default add to cart link inside of the loop
     *
     * @param  string $link    Current link.
     * @param  object $product WooCommerce Product class
     * @param  array  $args    Extra arguments
     *
     * @return string
     */
    function unico_prefijo_wc_loop_add_to_cart_link( $link, $product, $args ) {
    	$text  = esc_html__( 'ver más', 'tu_textdomain' );
    	$url   = ( method_exists( $product, 'get_permalink' ) ? esc_url( $product->get_permalink() ) : '' );
    	$attrs = '';
    	// $attrs = isset( $args['attributes'] ) ? ' ' . wc_implode_html_attributes( $args['attributes'] ) : '' );
    
        return sprintf( '<a class="button" href="%1$s"%2$s>%3$s</a>', $url, $attrs, $text );
    }
    add_filter( 'woocommerce_loop_add_to_cart_link', 'unico_prefijo_wc_loop_add_to_cart_link', 999, 3 );
    

    Te comento:
    Personalmente siempre en estos casos añado el action o filter despues de definir la funcion.
    Añado el parametro $args definido en el filtro predeterminado en ‘/plugins/woocommerce/templates/loop/add-to-cart.php’
    Reemplaza ‘unico_prefijo’ por lo dice el texto e.g. ‘rebu_func’
    Personalmente uso el mismo nombre del filtro para el nombre del metodo o funcion, asi es mas rapido identificarlo si por ejemplo defines la funcion en un archivo y el filtro en otro archivo.
    Las variables son escapadas “WordPress Coding Standards”
    En $text mejor usa tu propio ‘Text Domain’, El domain ‘woocommerce’ no tiene ese texto, el texto esta en minusculas para prevenir que cuando se traduzca ese texto no lo pongan en mayusculas, te recomiendo que lo conviertes en mayusculas por css asi es mas facil su modificacion, desde mi punto de vista.

    
    .button {
     text-transform: uppercase;
    }
    

    En $url primero compruebo que existe el metodo get_permalink por si acaso la variable $product no es un clase de WooCommerce Product. No mostraria ningun error PHP y la carga de la web seguiria sin problemas.
    En $attr como creo que no lo usas esta vacia igual que tampoco he añadido $args['class'].
    Si quieres descomenta la otra para permitir añadir los atributos.
    Personalmete suelo usar sprintf pero tu manera es totalmente valida, aunque es reconmendable llamar a la funcion antes para evitar que si esa funcion se retrasa el echo no llegase a capturar el valor, pasa 1 de cada 1000000 pero pasa.
    La prioridad del filtro es elevada para que sea el ultimo filtro asi nos aseguramos que se usa el contenido definido.

    Espero que no te importe, y gracias por compartirlo para los demas usuarios.
    Saludos!

Viendo 3 respuestas - 1 de 3 (de 3 total)
  • Debes estar registrado para responder a este tema.