WooCommerce - Переопределение хука действия
В файле шаблона WooCommerce "content-product.php" я пытаюсь переопределить следующий хук действия:
/**
* хук woocommerce_shop_loop_item_title
*
* @hooked woocommerce_template_loop_product_title - 10
*/
do_action( 'woocommerce_shop_loop_item_title' );
Чтобы переопределить этот хук, я добавил следующее в файл 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>';
}
Это только добавляет код к хуку. Как мне полностью заменить хук своим собственным кодом? Я проверил документацию WooCommerce, но там не так много информации об этом.

На самом деле изменить заголовок в content-product.php довольно просто, но вы не сможете сделать это с помощью хука. В начале файла вы должны увидеть эту строку:
Переопределите этот шаблон, скопировав его в yourtheme/woocommerce/content-product.php
Все, что вам нужно сделать, это скопировать файл в указанную выше директорию, заменив "yourtheme" на фактическое имя папки вашей темы, и внести нужные изменения в новый файл.
Немного больше информации о хуках
Заголовок в стандартном файле шаблона content-product.php выводится следующим образом, что определено в wc-template-functions.php, если вы ищите woocommerce_template_loop_product_title(), он выводит следующий заголовок:
<h3><?php the_title(); ?></h3>
Чтобы изменить заголовок с помощью хука, вам нужно было бы изменить указанную выше строку на это, но вы не можете сделать это без изменения файла wc-template-functions.php. Поэтому вы можете закомментировать действие в файле content-product.php:
//do_action( 'woocommerce_shop_loop_item_title' );
и затем добавить следующую строку:
?><h3><?php echo apply_filters( 'my_filter_name', get_the_title() ); ?></h3><?php
так что сохраненная версия будет выглядеть так:
//do_action( 'woocommerce_shop_loop_item_title' );
?><h3><?php echo apply_filters( 'my_filter_name', get_the_title() ); ?></h3><?php
Затем вам нужно добавить следующее в файл functions.php вашей темы, что передаст содержимое get_the_title() в параметр $title, который вы затем можете изменить любым способом, но в данном случае изменит каждый заголовок на "Custom Title":
add_filter( 'my_filter_name', 'my_custom_function' );
function my_custom_function( $title ) {
return 'Custom Title';
}
Для получения дополнительной информации см. следующие ссылки:

В WordPress невозможно просто "перезаписать" хук (это работает только для заменяемых функций).
Однако вы можете добавить новую функцию к тому же хуку и удалить существующее действие.
Попробуйте сделать так:
add_action("init", function () {
// удаляем хук WooCommerce
remove_action('woocommerce_shop_loop_item_title', 'change_product_title');
});
// добавляем новую функцию к хуку
add_action("woocommerce_shop_loop_item_title", function () {
echo "моё новое действие";
});
