¿Cómo puedo sobreescribir estas funciones de botones del widget del carrito de WooCommerce?

3 jul 2017, 14:26:07
Vistas: 24.1K
Votos: 2

Ya he intentado unos 20 métodos diferentes para hacer que esto funcione sin encontrar una solución.

Estoy tratando de cambiar las clases de los botones en el widget del mini carrito de WooCommerce como se muestra a continuación.

Botones del widget del mini carrito de WooCommerce

El código para esos botones está escrito en dos funciones dentro del archivo wc-template-functions.php:

if ( ! function_exists( 'woocommerce_widget_shopping_cart_button_view_cart' ) ) {

        /**
         * Genera el botón de proceder al carrito.
         *
         * @subpackage  Cart
         */
        function woocommerce_widget_shopping_cart_button_view_cart() {
            echo '<a href="' . esc_url( wc_get_cart_url() ) . '" class="button wc-forward">' . esc_html__( 'View cart', 'woocommerce' ) . '</a>';
        }
    }

    if ( ! function_exists( 'woocommerce_widget_shopping_cart_proceed_to_checkout' ) ) {

        /**
         * Genera el botón de proceder al pago.
         *
         * @subpackage  Cart
         */
        function woocommerce_widget_shopping_cart_proceed_to_checkout() {
            echo '<a href="' . esc_url( wc_get_checkout_url() ) . '" class="button checkout wc-forward">' . esc_html__( 'Checkout', 'woocommerce' ) . '</a>';
        }
    }

¿Cuál es la forma correcta de sobreescribir estas funciones dentro de mi propio tema para poder cambiar las clases de esos dos botones?

0
Todas las respuestas a la pregunta 2
3

No estoy seguro si aún necesitas ayuda con esto, pero esto podría ayudar a otros en tu situación.

Si deseas cambiar la clase de la etiqueta <p> en tu ejemplo, el archivo que necesitas editar se encuentra en /wp-content/plugins/woocommerce/templates/cart/mini-cart.php

Obviamente, no edites el archivo directamente. Cópialo en tu tema (o preferiblemente en un tema hijo) dentro de la carpeta /wp-content/themes/tu-tema/woocommerce/cart/mini-cart.php y puedes editar la línea #75 para agregar tus propias clases CSS. La línea #75 dice:

<p class="woocommerce-mini-cart__buttons buttons"><?php do_action( 'woocommerce_widget_shopping_cart_buttons' ); ?></p>

Si deseas modificar la clase CSS de la etiqueta <a>, entonces necesitarás eliminar la acción predeterminada y crear la tuya propia dentro del archivo functions.php de tu tema (o preferiblemente tema hijo), por ejemplo:

remove_action( 'woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_button_view_cart', 10 );
remove_action( 'woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_proceed_to_checkout', 20 );

function my_woocommerce_widget_shopping_cart_button_view_cart() {
    echo '<a href="' . esc_url( wc_get_cart_url() ) . '" class="btn btn-default">' . esc_html__( 'Ver carrito', 'woocommerce' ) . '</a>';
}
function my_woocommerce_widget_shopping_cart_proceed_to_checkout() {
    echo '<a href="' . esc_url( wc_get_checkout_url() ) . '" class="btn btn-default">' . esc_html__( 'Pagar', 'woocommerce' ) . '</a>';
}
add_action( 'woocommerce_widget_shopping_cart_buttons', 'my_woocommerce_widget_shopping_cart_button_view_cart', 10 );
add_action( 'woocommerce_widget_shopping_cart_buttons', 'my_woocommerce_widget_shopping_cart_proceed_to_checkout', 20 );

Necesitarás limpiar la caché de tu navegador o agregar otro artículo al carrito para ver los cambios, ya que el contenido del carrito se guarda en el sessionStorage del navegador para evitar cargar una nueva copia en cada página.

4 oct 2017 14:09:44
Comentarios

La solución parece que debería funcionar, pero no me está funcionando. La agregué al functions.php en el tema hijo pero los cambios no parecen surtir efecto. ¿Habrá algún otro mecanismo de caché quizás?

Karl Adler Karl Adler
6 ene 2018 15:36:16

NVM (no importa), usé un sub-tema para un sub-tema que no utilizaba las funciones de widgets...

Karl Adler Karl Adler
6 ene 2018 15:49:41

Punto muy importante mencionar que esto está en caché. Estuve atascado durante una hora ^^

Chaoste Chaoste
18 jun 2020 14:32:31
0

El código de la respuesta anterior ya no funciona. El enfoque sigue siendo válido pero el código no funciona. Así que el siguiente código funciona actualmente, puedes agregarlo a tu archivo functions.php. (Abril 2021):

Un reconocimiento a Mat, gracias por tu respuesta.

function custom_widget_cart_btn_view_cart()
{
  echo '<a href="' . esc_url(wc_get_cart_url()) . '" class="button wc-forward">' . esc_html__('Ver Carrito Personalizado', 'woocommerce') . '</a>';
}

function custom_widget_cart_checkout()
{
  echo '<a href="' . esc_url(wc_get_checkout_url()) . '" class="button checkout wc-forward">' . esc_html__('Pago Personalizado', 'woocommerce') . '</a>';
}

function custom_widget_cart_subtotal()
{
  echo '<strong>' . esc_html__('Subtotal Personalizado: ', 'woocommerce') . '</strong> ' . WC()->cart->get_cart_subtotal();
}

remove_action('woocommerce_widget_shopping_cart_total', 'woocommerce_widget_shopping_cart_subtotal', 10);
remove_action('woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_button_view_cart', 10);
remove_action('woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_proceed_to_checkout', 20);

add_action('woocommerce_widget_shopping_cart_total', 'custom_widget_cart_subtotal', 11);
add_action('woocommerce_widget_shopping_cart_buttons', 'custom_widget_cart_btn_view_cart', 12);
add_action('woocommerce_widget_shopping_cart_buttons', 'custom_widget_cart_checkout', 21);
30 abr 2021 06:37:53