¿Cómo puedo sobreescribir estas funciones de botones del widget del carrito de WooCommerce?
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.
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?

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.

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?

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

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);
