WooCommerce - Sovrascrivere action hook

12 ago 2015, 21:01:50
Visualizzazioni: 30.7K
Voti: 1

All'interno del file template di WooCommerce "content-product.php", sto cercando di sovrascrivere il seguente action hook:

/**
* woocommerce_shop_loop_item_title hook
*
* @hooked woocommerce_template_loop_product_title - 10
*/
do_action( 'woocommerce_shop_loop_item_title' );

Per sovrascrivere questo hook, ho aggiunto quanto segue al mio file functions.php:

add_action('woocommerce_shop_loop_item_title', 'change_product_title');

function change_product_title() {
    echo'<header class="entry-header"><h1 class="entry-title">'.get_the_title().'</h1></header>';
}

Questo aggiunge solo del codice all'hook. Come posso sostituire completamente l'hook con il mio codice? Ho controllato la documentazione di WooCommerce, ma non fornisce molte informazioni a riguardo.

1
Commenti

remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

chris_r chris_r
5 apr 2017 04:13:55
Tutte le risposte alla domanda 2
2

In realtà è piuttosto semplice modificare il titolo in content-product.php, ma non potrai farlo con un hook. Verso l'inizio del file, dovresti vedere questa riga:

Override this template by copying it to yourtheme/woocommerce/content-product.php

Tutto ciò che devi fare è copiare il file nella directory sopra indicata, sostituendo "yourtheme" con il nome effettivo della cartella del tuo tema, e apportare le modifiche desiderate al nuovo file.

Un po' più di contesto sugli hook

Il titolo nel file template content-product.php di default viene visualizzato così, come definito in wc-template-functions.php se cerchi woocommerce_template_loop_product_title() echo il titolo qui sotto:

<h3><?php the_title(); ?></h3>

Per modificare il titolo con un hook, dovresti cambiare la riga sopra in questo modo, ma non puoi farlo senza modificare il file wc-template-functions.php. Quindi quello che puoi fare è commentare l'azione nel file content-product.php:

//do_action( 'woocommerce_shop_loop_item_title' );

e poi aggiungere la riga qui sotto:

?><h3><?php echo apply_filters( 'my_filter_name', get_the_title() ); ?></h3><?php

quindi la versione salvata apparirà così:

//do_action( 'woocommerce_shop_loop_item_title' );
?><h3><?php echo apply_filters( 'my_filter_name', get_the_title() ); ?></h3><?php

Poi, dovrai aggiungere quanto segue al file functions.php del tuo tema, che passerà il contenuto di get_the_title() al parametro $title, che potrai modificare come preferisci, ma nel caso qui sotto cambierà ogni titolo in "Titolo Personalizzato":

add_filter( 'my_filter_name', 'my_custom_function' );

function my_custom_function( $title ) {
  return 'Titolo Personalizzato';
}

Per maggiori informazioni, consulta i seguenti link:

http://codex.wordpress.org/Function_Reference/apply_filters

http://codex.wordpress.org/Function_Reference/add_filter

13 ago 2015 01:14:35
Commenti

remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

chris_r chris_r
5 apr 2017 04:13:49

@Chris Eccellente! Grazie. Non avrei potuto trovare una risposta migliore.

Ruvee Ruvee
9 apr 2021 22:08:15
2

in WordPress, non puoi semplicemente "sovrascrivere" un hook (questo funziona solo per le funzioni pluggable)

ma puoi aggiungere una nuova funzione allo stesso hook e rimuovere un'azione.

prova qualcosa del genere:

add_action("init", function () {
    // rimozione dell'hook di woocommerce
    remove_action('woocommerce_shop_loop_item_title', 'change_product_title');
});

// aggiungi una nuova funzione all'hook
add_action("woocommerce_shop_loop_item_title", function () {

    echo "la mia nuova azione";

});
12 ago 2015 21:06:21
Commenti

Grazie, ma questo non sembra rimuovere il titolo originale.

Sam Sam
12 ago 2015 21:19:25

remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

chris_r chris_r
5 apr 2017 04:13:43