Вот такая засада.

В родительской теме определен ряд хуков, которые мешают мне и хочется их удалить в дочерней теме.

Логично предположить что нужно просто вставить remove_action или remove_filter в function.php дочерней темы.

Но не тут то было!

Это не работает.

Как оказывается, function.php дочерней темы грузится перед тем же файлом родительской темы. И если использовать обычную схему, то получится что попытка удаления хука произойдет перед его добавлением. Что как мы знаем по кодексу оказывается безрезультатным.

Таким образом нам нужно добиться ситуации, когда удаление хука произойдет после его определения.

Как это сделать?

Все очень просто 🙂 Нужно удаление хука зацепить на более поздний хук, который выполнится после определения хука родительской темы. О как 🙂

Но все просто. Самый элементарный хук init вполне нам подойдет.

И делаем так:

add_action('init','removeOldFunction');
function removeOldFunction(){
  remove_action( 'template_redirect', 'alienship_nice_search_redirect' );
}

Этим кодом мы удалим хук alienship_nice_search_redirect, который определен в родительской теме, при помощи function.php дочерней.
Проверено 🙂

Все хорошо, пока дело не касается сайдбара. Там хук инициализации виджетов работает еще позднее чем init, потому нужно вешаться на хук after_setup_theme.

Ну и в других случаях. Удаляя тот или иной хук не забудьте проверить его порядок загрузки и убедиться что он грузится позднее, чем тот который вы удаляете.