Использование хуков действий в дочерних темах WordPress

Эта статья из цикла статей «Стилизация дочерних тем», который состоит из следующих пунктов:

  1. Основы создания дочерней темы WordPress
  2. Модульная CSS-стилизация в дочерних темах WordPress.
  3. Использование хуков фильтров в дочерних темах WordPress.
  4. Использование хуков действий в дочерних темах WordPress.

В данной статье мы рассмотрим, как написать свою PHP-функцию, а также пробежимся по основной идее использования хуков действий в теме WordPress. Также мы создадим простой текст приветствия в теме без редактирования кода и посмотрим, как удалить существующий контент, подцепленный к хукам.

Собираем функцию

Хуки действий присутствуют в преобладающем большинстве современных тем. На это есть серьезное основание — хуки действий невероятно удобны и очень мощны.

Чтобы научиться ими пользоваться, давайте напишем простую PHP-функцию. Не волнуйтесь, мы оставим ее настолько простой, насколько это возможно.

function pretty_basic() {
 
   // This is a PHP comment.
 
   // PHP "stuff" goes here.
 
}
 
function still_pretty_basic() { ?>
 
   <!-- HTML comment now -->
 
   <!-- Notice how I "broke out" of writing PHP? -->
 
   <!-- I added closing and opening PHP tags just inside the curly braces -->
 
   
 
   <?php // I can even write more familiar-looking PHP here ?>
 
<?php }

Мы создали PHP-функцию. Это достаточно простой шаг. Она содержит в себе определенный код. Вызвать функцию потом можно следующим образом:

<?php pretty_basic() ?>
 
<?php still_pretty_basic() ?>

Вы уже сталкивались ранее с вызовом функций в данном руководстве на примере wp_list_pages () или the_content (). Эти функции уже заполнены необходимым материалом, который хранится где-то глубоко в WordPress – нам достаточно лишь вызвать их где-нибудь в шаблонах.

Основная идея использования хуков действий

Многие действительно умные разработчики стали добавлять к своим темам пустые функции, готовые к заполнению определенным контентом. Мы будем называть такие функции хуками действий. Скорее всего, вы уже сталкивались с ними прежде.

В темах WordPress используется несколько хуков по умолчанию, которые называются wp_head() и wp_footer(). Эти две функции вызываются для добавления материалов к теме WordPress, позволяя избежать редактирования шаблонов.

Давайте вкратце расскажем, какие преимущества открываются перед вами, если ваша любимая тема использует хуки действий: вы можете добавлять любой контент, который захотите, будь то дополнительные функции WordPress, вызовы плагинов, слайдеры на jQuery и т.д., причем все это вы можете сделать, просто добавив вашу функцию к уже существующему хуку действий. К тому же, все ваши коррективы не пропадут после обновлений темы.

Добавление контента к хуку действий

Давайте сделаем что-то на практике, к примеру, добавим текст «Welcome To My Blog» сразу под хэдером темы Thematic с помощью хука действий thematic_belowheader(). Поместите следующий фрагмент кода в файл functions.php вашей дочерней темы:

// First we make our function
function childtheme_welcome_blurb() {
 
// We'll show it only on the HOME page IF it's NOT paged
// (so, not page 2,3,etc.)
if (is_home() & !is_paged()) { ?>
 
<!-- our welcome blurb starts here -->
<div id="welcome-blurb">
<p>Welcome to <?php bloginfo('name'); ?>.</p>
</div>
<!-- our welcome blurb ends here -->
<?php }
 
} // end of our new function childtheme_welcome_blurb
 
// Now we add our new function to our Thematic Action Hook
add_action('thematic_belowheader','childtheme_welcome_blurb');

Все очень просто. Хотите добавить что-нибудь к теме WordPress, не ковыряясь в файлах и обезопасив себя от последующих обновлений? Просто найдите хуки действий, используемые в теме!

Удаление существующего контента из хуков действий

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

// Unhook default Thematic functions
function unhook_thematic_functions() {
    // Don't forget the position number if the original function has one
    remove_action('thematic_hook_name','thematic_function_name',postitionnumber);
}
add_action('init','unhook_thematic_functions');

Также в качестве примера представлен фрагмент кода, который позволит удалить навигационное меню из темы Thematic. Просто вставьте этот код в файл functions.php вашей дочерней темы:

// Unhook default Thematic functions
function unhook_thematic_functions() {
    // Don't forget the position number if the original function has one
    remove_action('thematic_header','thematic_access',9);
}
add_action('init','unhook_thematic_functions');

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

Источник: themeshaper.com

Блог про WordPress
Комментарии: 10
  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 дочерней темы, чтобы не создавались дубли фотографии?

  2. Дмитрий (автор)

    Возможно, вот эти размеры убрать:

    // 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 );

  3. Евгений

    Да, это без проблем можно сделать в родительской теме. А что нужно прописать в файле functions.php дочерней темы, чтобы убрать эти строки в родительской теме?

    1. Дмитрий (автор)

      Решение есть, но оно достаточно сложное. Вам следует ознакомиться с этой статьей:

      http://wordpress.stackexchange.com/questions/74934/remove-or-update-add-image-size

      Здесь показано, как следует переписать add_image_size на основании большего приоритета. Но, еще раз скажу, решение это достаточно сложное и зависит от некоторых условий.

  4. Евгений

    Спасибо, Дмитрий, попробую поковыряться в коде, хоть и не силён в этом. Чувствую что проще будет изменить functions.php родительской темы)))

  5. Евгений

    Всё, чего мне удалось добиться, это — изменение размеров фотографий создаваемых дублей. А вот как сделать, чтобы они совсем не создавались, пока не придумал.

  6. Евгений

    Получилось, спасибо Дмитрий, Вы мне очень помогли!

    1. Дмитрий (автор)

      Спасибо! Тут, конечно, вы сами больше поработали, чем я)

  7. Юрий

    Вечер добрый! Подскажите ( если возможно разжевать)как создать хук вставки изображения в header/ И вставки кода плагина слайдера в headerэ
    ПОЖАЛУЙСТА !!!!!!!!!!!!!!!!!!!

    1. Дмитрий (автор)

      Этот вопрос слишком общий и в двух словах объяснить это практически нереально. Попробуйте прочитать статьи, посвященные хукам — их много, найти их можете по запросу хуки через поиск по блогу.

Добавить комментарий для Дмитрий Алёшин Отменить ответ

Получать новые комментарии по электронной почте.