WooCommerce - Sobrescribir hook de acción

12 ago 2015, 21:01:50
Vistas: 30.7K
Votos: 1

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.

1
Comentarios

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

chris_r chris_r
5 abr 2017 04:13:55
Todas las respuestas a la pregunta 2
2

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:

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

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

13 ago 2015 01:14:35
Comentarios

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

chris_r chris_r
5 abr 2017 04:13:49

@Chris ¡Excelente! Gracias. No podía encontrar una mejor respuesta.

Ruvee Ruvee
9 abr 2021 22:08:15
2

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";

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

Gracias, pero esto no parece eliminar el título original.

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 abr 2017 04:13:43