remove_action или remove_filter не работает в дочерней теме WordPress, если пытаться удалить хуки родительской темы

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

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

Логично предположить что нужно просто вставить 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.

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

комментария 2

  1. Здравствуйте.
    Подскажите, пожалуйста.
    В моей теме при загрузке фото, создаются дубли этой фотографии с указанными размерами. Реализуется это в файле function.php с помощью следующего кода:
    /* Theme setup
    /* ———————————— */
    if ( ! function_exists( ‘alx_setup’ ) ) {

    function alx_setup() {
    // Enable automatic feed links
    add_theme_support( ‘automatic-feed-links’ );

    // Enable featured image
    add_theme_support( ‘post-thumbnails’ );

    // Enable post format support
    add_theme_support( ‘post-formats’, array( ‘audio’, ‘aside’, ‘chat’, ‘gallery’, ‘image’, ‘link’, ‘quote’, ‘status’, ‘video’ ) );

    // Declare WooCommerce support
    add_theme_support( ‘woocommerce’ );

    // Thumbnail sizes
    add_image_size( ‘thumb-small’, 160, 160, true );
    add_image_size( ‘thumb-medium’, 520, 245, true );
    add_image_size( ‘thumb-large’, 720, 340, true );

    // Custom menu areas
    register_nav_menus( array(
    ‘topbar’ => ‘Topbar’,
    ‘header’ => ‘Header’,
    ‘footer’ => ‘Footer’,
    ) );
    }

    }
    add_action( ‘after_setup_theme’, ‘alx_setup’ );

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

    • Попробуйте поиграть с хуками из этой статьи

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *