Удалить действие родительской темы в дочерней теме

Я создал дочернюю тему из темы Shophistic Lite.

Я хочу удалить действие в дочерней теме.

// wp-content \ plugins \ woocommerce \ templates \ content-product.php ...

/**
 * woocommerce_shop_loop_item_title hook.
 *
 * @hooked woocommerce_template_loop_product_title - 10
 */
do_action( 'woocommerce_shop_loop_item_title' );

/**
 * woocommerce_after_shop_loop_item_title hook.
 *
 * @hooked woocommerce_template_loop_rating - 5
 * @hooked woocommerce_template_loop_price - 10
 */
do_action( 'woocommerce_after_shop_loop_item_title' );

/**
 * woocommerce_after_shop_loop_item hook.
 *
 * @hooked woocommerce_template_loop_product_link_close - 5
 * @hooked woocommerce_template_loop_add_to_cart - 10
 */
do_action( 'woocommerce_after_shop_loop_item' );

...

// \ wp-content \ themes \ shophistic-lite \ framework \ functions \ woocommerce_support.php

...
/**
 * Adds the Switch View buttons
 */
function shophistic_lite_show_attribute() {
...
}
add_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
...

// \ wp-content \ themes \ shophistic-lite-child \ functions.php

...
function remove_functions() {
    remove_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
}
add_action('woocommerce_after_shop_loop_item' , 'remove_functions' );
...

Я сделал это с помощью этой статьи: https://code.tutsplus.com/tutorials/a-guide-to-overriding-parent-theme-functions-in-your-child-theme--cms-22623 Но для меня это не работает. Функция shophistic_lite_show_attribute все еще выполняется.

Пожалуйста, помогите мне решить эту проблему.


person Артём Матушенко    schedule 22.01.2017    source источник


Ответы (2)


Вместо этого вам следует попробовать ловушку 'init' для действия удаления, чтобы удалить его при инициализации:

function child_custom_actions() {
    remove_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
}
add_action( 'init' , 'child_custom_actions' );

Этот код находится в файле function.php вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код протестирован и работает (см. ниже).


Обновление, связанное с вашим комментарием:

Я загрузил вашу тему Shophistic Lite на тестовый сервер, создал дочернюю тему.

Я временно изменил функцию в основной теме в файле woocommerce_support.php, чтобы она отображала что-то без каких-либо специальных настроек (и сохраненных) Сюда:

/**
 * Adds the Switch View buttons
 */
function shophistic_lite_show_attribute() {
    echo '<p>BLA BLA</p>';
}
add_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );

И он отображает на странице магазина следующее:

введите описание изображения здесь

Затем я добавил код первого фрагмента выше в файл function.php дочерней темы (то же самое, что вы пробовали с крючком init), и он просто отлично работает, удаляя этот "BLA BLA".

Так что, возможно, вы пытаетесь удалить что-то еще, что не создается этим хуком ...

person LoicTheAztec    schedule 22.01.2017
comment
В учебнике, который я приложил к моему вопросу, говорится: ›... вам нужно прикрепить эту функцию к хуку, который будет срабатывать после хука, к которому прикреплена функция родительской темы ... В этом контексте эта функция < / b> означает remove_action - person Артём Матушенко; 23.01.2017
comment
Кстати, пробовал использовать init хук - не работает. - person Артём Матушенко; 23.01.2017
comment
Хорошо, жду твоего ответа. Я снова попытался использовать хук init, но безрезультатно. - person Артём Матушенко; 23.01.2017
comment
@ АртёмМатушенко Только что протестировал, см. Соответствующее обновление в моем ответе. - person LoicTheAztec; 23.01.2017

В моем случае я пытался удалить раздел связанных продуктов со страницы одного продукта. Это не был раздел продукта по умолчанию, он относился к моей теме (и поэтому мне пришлось удалить действие из родительской темы).

Использование хука wp_loaded работало нормально, а хук init, упомянутый выше, не работал.

Итак, наконец, этот код в моей дочерней теме работает нормально:

function child_custom_actions() {
    remove_action( 'woocommerce_after_single_product', 'woocommerce_output_related_products', 20 );
}
add_action( 'wp_loaded' , 'child_custom_actions' );

Предупреждение: woocommerce_after_single_product ловушка не является ловушкой по умолчанию для раздела продуктов, связанных с woocommerce, она специфична для моей темы, вам может потребоваться использовать ловушку woocommerce_after_single_product_summary.

person Martin Pclin    schedule 20.08.2020