Come posso sovrascrivere queste funzioni dei pulsanti del widget carrello di WooCommerce

3 lug 2017, 14:26:07
Visualizzazioni: 24.1K
Voti: 2

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.

screenshot dei pulsanti del widget carrello WooCommerce

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?

0
Tutte le risposte alla domanda 2
3

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.

4 ott 2017 14:09:44
Commenti

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?

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

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

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

Punto molto importante da menzionare è che questo viene memorizzato nella cache. Sono rimasto bloccato per un'ora ^^

Chaoste Chaoste
18 giu 2020 14:32:31
0

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);
30 apr 2021 06:37:53