В дочерней теме пытаюсь переопределить хук, который используется в основной теме:
funcitons.php - основная тема
function thegem_woocommerce_template_loop_category_title($category) {
echo '<div class="category-overlay">';
echo '<h6 class="category-title">'.$category->name.'</h6>';
echo '<div class="category-overlay-separator"></div>';
echo '<div class="category-count">'.sprintf(esc_html(_n('%s item', '%s items', $category->count, 'thegem')), $category->count).'</div>';
echo '</div>';
}
remove_action( 'woocommerce_shop_loop_subcategory_title', 'woocommerce_template_loop_category_title', 10 );
add_action( 'woocommerce_shop_loop_subcategory_title', 'thegem_woocommerce_template_loop_category_title', 10 );
functions.php - дочерняя тема
function thegem_woocommerce_template_loop_category_title1($category) {
echo '<div class="category-overlay">';
echo '<h6 class="category-title">'.$category->name.' test</h6>';
echo '</div>';
}
remove_action( 'woocommerce_shop_loop_subcategory_title', 'thegem_woocommerce_template_loop_category_title', 10 );
add_action( 'woocommerce_shop_loop_subcategory_title', 'thegem_woocommerce_template_loop_category_title1', 10 );
но срабатывают два хука.
Как переопределить хук из основной темы, чтобы он не выводился?
Сначала подключается код плагинов, потом functions.php в дочерней теме, потом в основной - так устроен WordPress. На момент исполнения вашей строки
remove_action( 'woocommerce_shop_loop_subcategory_title', 'thegem_woocommerce_template_loop_category_title', 10 );
функция thegem_woocommerce_template_loop_category_title не прикреплена к хуку, поэтому никакого эффекта она не имеет. Как результат - выполняются обе функции, приведенные в вопросе.
В то же время remove_action в дочерней теме срабатывает, потому что исполняется после подключения плагина WooCommerce, который и объявляет свою функцию для хука.
Ваш код в дочерней теме должен выглядеть так:
function thegem_woocommerce_template_loop_category_title1( $category ) {
remove_action( 'woocommerce_shop_loop_subcategory_title', 'thegem_woocommerce_template_loop_category_title', 10 );
echo '<div class="category-overlay">';
echo '<h6 class="category-title">' . $category->name . ' test</h6>';
echo '</div>';
}
add_action( 'woocommerce_shop_loop_subcategory_title', 'thegem_woocommerce_template_loop_category_title1', 0 );
Обратите внимание на приоритет 0 в add_action (может быть любым меньше 10). Вы запускаете свою функцию ...title1 по событию woocommerce_shop_loop_subcategory_title раньше функции из родительской темы, и прямо внутри своей функции отменяете родительскую.
Продвижение своими сайтами как стратегия роста и независимости