WooCommerce - Suprascrierea unui action hook

12 aug. 2015, 21:01:50
Vizualizări: 30.7K
Voturi: 1

În cadrul fișierului template WooCommerce "content-product.php", încerc să suprascriu următorul action hook:

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

Pentru a suprascrie acest hook, am adăugat următorul cod în fișierul meu 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>';
}

Acest cod doar adaugă la hook. Cum pot să înlocuiesc complet hook-ul cu propriul meu cod? Am verificat documentația WooCommerce, dar nu oferă prea multe detalii în acest sens.

1
Comentarii

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

chris_r chris_r
5 apr. 2017 04:13:55
Toate răspunsurile la întrebare 2
2

Este destul de simplu să modifici titlul în fișierul content-product.php, dar nu vei putea face acest lucru folosind un hook. Aproape de începutul fișierului, ar trebui să vezi această linie:

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

Tot ce trebuie să faci este să copiezi fișierul în directorul menționat mai sus, înlocuind "yourtheme" cu numele real al folderului temei tale, și să faci modificările dorite în noul fișier.

Mai multe detalii despre hooks

Titlul din fișierul template implicit content-product.php este afișat astfel, ceea ce este definit în wc-template-functions.php dacă cauți woocommerce_template_loop_product_title() afișează titlul de mai jos:

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

Pentru a schimba titlul cu un hook, ai nevoie să modifici linia de mai sus în acest fel, dar nu poți face asta fără a modifica fișierul wc-template-functions.php. Deci, ceea ce poți face este să comentezi acțiunea din fișierul content-product.php:

//do_action( 'woocommerce_shop_loop_item_title' );

și apoi să adaugi următoarea linie:

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

astfel încât versiunea salvată să arate astfel:

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

Apoi, va trebui să adaugi următoarele în fișierul functions.php al temei tale, care va transmite conținutul funcției get_the_title() către parametrul $title, pe care îl poți modifica în orice fel dorești, dar în cazul de mai jos va schimba fiecare titlu în "Custom Title":

add_filter( 'my_filter_name', 'my_custom_function' );

function my_custom_function( $title ) {
  return 'Custom Title';
}

Pentru mai multe informații, consultă următoarele:

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

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

13 aug. 2015 01:14:35
Comentarii

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

chris_r chris_r
5 apr. 2017 04:13:49

@Chris Excelent! Mulțumesc. Nu am putut găsi un răspuns mai bun.

Ruvee Ruvee
9 apr. 2021 22:08:15
2

În WordPress, nu poți pur și simplu să "suprascrii" un hook (asta funcționează doar pentru funcții pluggable)

Dar, poți adăuga o nouă funcție la același hook și poți elimina o acțiune.

Încearcă ceva de genul acesta:

add_action("init", function () {
    // eliminarea hook-ului WooCommerce
    remove_action('woocommerce_shop_loop_item_title', 'change_product_title');
});

// adăugarea unei noi funcții la hook
add_action("woocommerce_shop_loop_item_title", function () {

    echo "noua mea acțiune";

});
12 aug. 2015 21:06:21
Comentarii

Mulțumesc, dar se pare că aceasta nu elimină titlul original.

Sam Sam
12 aug. 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