WooCommerce - Переопределение хука действия

12 авг. 2015 г., 21:01:50
Просмотры: 30.7K
Голосов: 1

В файле шаблона 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, но там не так много информации об этом.

1
Комментарии

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

chris_r chris_r
5 апр. 2017 г. 04:13:55
Все ответы на вопрос 2
2

На самом деле изменить заголовок в 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';
}

Для получения дополнительной информации см. следующие ссылки:

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

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

13 авг. 2015 г. 01:14:35
Комментарии

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

chris_r chris_r
5 апр. 2017 г. 04:13:49

@Chris Отлично! Спасибо. Не смог найти лучшего ответа.

Ruvee Ruvee
9 апр. 2021 г. 22:08:15
2

В 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 "моё новое действие";

});
12 авг. 2015 г. 21:06:21
Комментарии

Спасибо, но это, кажется, не удаляет оригинальный заголовок.

Sam Sam
12 авг. 2015 г. 21:19:25

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

chris_r chris_r
5 апр. 2017 г. 04:13:43