WooCommerce - Sobrescribir hook de acción
Dentro del archivo de plantilla "content-product.php" de WooCommerce, estoy tratando de sobrescribir el siguiente hook de acción:
/**
* Hook woocommerce_shop_loop_item_title
*
* @hooked woocommerce_template_loop_product_title - 10
*/
do_action( 'woocommerce_shop_loop_item_title' );
Para sobrescribir este hook, he añadido lo siguiente a mi archivo 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>';
}
Esto solo añade código al hook. ¿Cómo puedo reemplazar completamente el hook con mi propio código? He revisado la documentación de WooCommerce, pero no proporciona mucha información al respecto.

En realidad es bastante simple cambiar el título en content-product.php, pero no podrás hacerlo con un hook. Cerca del inicio del archivo, deberías ver esta línea:
Override this template by copying it to yourtheme/woocommerce/content-product.php
Todo lo que tienes que hacer es copiar el archivo al directorio mencionado, reemplazando "yourtheme" con el nombre real de la carpeta de tu tema, y hacer las modificaciones deseadas en el nuevo archivo.
Un poco más de contexto sobre los hooks
El título en el archivo de plantilla content-product.php por defecto se muestra así, lo cual está definido en wc-template-functions.php si buscas woocommerce_template_loop_product_title() muestra el siguiente título:
<h3><?php the_title(); ?></h3>
Para cambiar el título con un hook, necesitarías cambiar la línea anterior por esto, pero no puedes hacerlo sin modificar el archivo wc-template-functions.php. Así que lo que puedes hacer es comentar la acción en el archivo content-product.php:
//do_action( 'woocommerce_shop_loop_item_title' );
y luego agregar la siguiente línea:
?><h3><?php echo apply_filters( 'my_filter_name', get_the_title() ); ?></h3><?php
así que la versión guardada se vería así:
//do_action( 'woocommerce_shop_loop_item_title' );
?><h3><?php echo apply_filters( 'my_filter_name', get_the_title() ); ?></h3><?php
Luego, necesitarías agregar lo siguiente al archivo functions.php de tu tema, lo cual pasará el contenido de get_the_title() al parámetro $title, el cual puedes modificar como desees, pero en el siguiente caso cambiará cada título a "Título Personalizado":
add_filter( 'my_filter_name', 'my_custom_function' );
function my_custom_function( $title ) {
return 'Título Personalizado';
}
Para más información, consulta lo siguiente:

En WordPress, no puedes simplemente "sobrescribir" un hook (eso solo funciona para funciones pluggables)
pero, puedes agregar una nueva función al mismo hook y eliminar una acción.
prueba algo como esto:
add_action("init", function () {
// eliminando el hook de woocommerce
remove_action('woocommerce_shop_loop_item_title', 'change_product_title');
});
// agregar una nueva función al hook
add_action("woocommerce_shop_loop_item_title", function () {
echo "mi nueva acción";
});
