Come posso sovrascrivere queste funzioni dei pulsanti del widget carrello di WooCommerce
Ho già provato circa 20 metodi diversi per far funzionare questo codice senza trovare una soluzione.
Sto cercando di modificare le classi dei pulsanti nel widget mini carrello di WooCommerce come mostrato qui sotto.
Il markup per quei pulsanti è scritto in due funzioni all'interno del file wc-template-functions.php:
if ( ! function_exists( 'woocommerce_widget_shopping_cart_button_view_cart' ) ) {
/**
* Output del pulsante visualizza carrello.
*
* @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' ) ) {
/**
* Output del pulsante procedi al checkout.
*
* @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>';
}
}
Qual è il modo corretto per sovrascrivere queste funzioni all'interno del mio tema in modo da poter modificare le classi di questi due pulsanti?

Non sono sicuro se hai ancora bisogno di aiuto con questo, ma potrebbe essere utile per altri nella tua situazione.
Se vuoi cambiare la classe del tag <p>
nel tuo esempio, il file che devi modificare si trova in /wp-content/plugins/woocommerce/templates/cart/mini-cart.php
Ovviamente, non modificare direttamente il file. Copialo nella tua cartella del tema (o preferibilmente del child theme) sotto /wp-content/themes/nome-tuo-tema/woocommerce/cart/mini-cart.php
e puoi modificare la riga #75 per inserire le tue classi CSS. La riga #75 recita:
<p class="woocommerce-mini-cart__buttons buttons"><?php do_action( 'woocommerce_widget_shopping_cart_buttons' ); ?></p>
Se vuoi modificare la classe CSS del tag <a>
, allora dovrai rimuovere l'azione predefinita e crearne una tua all'interno del file functions.php
del tuo tema (o preferibilmente del child theme), ad esempio:
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__( 'Visualizza carrello', '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__( 'Checkout', '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 );
Dovrai svuotare la cache del browser o aggiungere un altro articolo al carrello per vedere le modifiche, poiché il contenuto del carrello viene salvato nel sessionStorage del browser per evitare di recuperare una nuova copia ad ogni pagina.

La soluzione sembra dovrebbe funzionare, ma non funziona per me. L'ho aggiunta al file functions.php nel child theme ma le modifiche sembrano non avere effetto. C'è forse qualche altro meccanismo di cache?

NVM ho usato un sub-theme per un sub-theme che non utilizzava le funzioni dei widget...

Il codice nella vecchia risposta non funziona più. L'approccio è ancora valido ma il codice non funziona. Quindi il seguente codice funziona al momento, puoi inserirlo nel tuo functions.php
. (Aprile 2021):
Un ringraziamento speciale a Mat, grazie per la tua risposta.
function custom_widget_cart_btn_view_cart()
{
echo '<a href="' . esc_url(wc_get_cart_url()) . '" class="button wc-forward">' . esc_html__('Visualizza Carrello Personalizzato', 'woocommerce') . '</a>';
}
function custom_widget_cart_checkout()
{
echo '<a href="' . esc_url(wc_get_checkout_url()) . '" class="button checkout wc-forward">' . esc_html__('Checkout Personalizzato', 'woocommerce') . '</a>';
}
function custom_widget_cart_subtotal()
{
echo '<strong>' . esc_html__('Subtotale Personalizzato: ', '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);
