Russian (Pусский) translation by Narine Hovhannisyan (you can also view the original English article)
До сих пор вы добавляли действия-зацепки в фреймворк вашей темы и писали функции, которые активировались с помощью этих зацепок. Следующий шаг - это добавление фильтров, дающих больше гибкости.
Краткий Обзор Действий и Фильтров
Прежде чем продолжить, проведем краткий обзор разницы между действиями и фильтрами:
- Действия срабатывают в определенных местах в вашем коде. Само действие не содержит код, который выполняется, но обеспечивает расположение в коде, где вы можете сделать некоторые действия с помощью функций, активируемых с помощью зацепок.
- С помощью фильтров возможно изменить код, который уже написан в вашей теме. Фильтры берут в себя уже существующий код, который вы можете потом изменить или скорректировать с помощью функций, которые вы прикрепляете к зацепкам.
Для более подробной информации смотрите это замечательное руководство по действиям и фильтрам.
Как Создавать и Использовать Фильтры
<?php apply_filters( 'my_filter', 'код для фильтрации идет сюда' ); ?>
Вы можете получить доступ к фильтру с помощью функции add_filter()
:
<?php function my_function() { // код для функции здесь } add_filter( 'my_filter', 'my_function' ); ?>
То, что вы добавите в функцию, заменит фильтруемый код в фреймворке, так что здесь вы делаете ваши изменения и коррекции.
Что Вам Понадобится
Чтобы следовать зтому уроку, вам понадобится:
- Установка WordPress для разработки
- Редактор кода
- Если вы работаете с кодом, использованным в моем фреймворке, вот код с предыдущего урока.
Добавление Фильтров
В этом уроке я добавлю три фильтра в фреймворке:
- В "header", я возьму название и описание сайта в фильтр
- В "footer", я добавлю фильтр функции "colophon", которую мы добавили в предыдущем уроке
Это означает, что в будущем эти фильтры смогут быть изменены чайлд-темой или плагином. Вы можете добавить еще больше фильтров в фреймворк вашей темы: везде, где вы добавляете код или разметку, которую вы захотите позже поменять, вы можете использовать фильтр, позволяющий создать новый файл-шаблон в чайлд-теме.
Добавление Фильтра в Название и Описание Сайта
Начните с названия и описания сайта. Откройте файл header.php
и найдите следующий код:
<div class="site-name half left"> <!-- site name and description - site name is inside a div element on all pages except the front page and/or main blog page, where it is in a h1 element --> <h1 id="site-title"> <a href="<?php echo home_url(); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a> </h1> <h2 id="site-description"><?php bloginfo( 'description' ); ?></h2> </div>
Вместо того, чтобы написать один фильтр для всего этого, лучше добавьте отдельные фильтры названию и описанию сайта, таким образом вы можете изменять или корректировать то, что выведут эти фильтры.
В каждом случае вы заменяете функцию bloginfo()
на функцию get_bloginfo()
и потом добавляете echo
перед функцией apply_filters()
. Начнем с названия сайта. Поменяйте код внутри элемента h1
на:
<h1 id="site-title"> <a href="<?php echo home_url(); ?>" title="<?php echo esc_attr( apply_filters( 'wptutsplus_sitetitle', get_bloginfo( 'name', 'display' ) ) ); ?>" rel="home"> <?php echo apply_filters( 'wptutsplus_sitetitle', get_bloginfo( 'name' ) ); ?> </a> </h1>
Как вы видите, я добавила функцию apply_filters()
здесь дважды - один раз для атрибута названия ссылки, второй - для отображаемого текста. Новый код внизу:
<?php echo apply_filters( 'wptutsplus_sitetitle', get_bloginfo( 'name' ) ); ?>
Это создает фильтр под названием wptutsplus_sitetitle
и затем применяет его к функции get_bloginfo( 'name' )
. Затем это и отображается.
Теперь сделаем то же самое с описанием сайта. Это немного легче сделать, так как здесь нет ссылки. Отредактируйте элемент h2
следующим образом:
<h2 id="site-description"> <?php echo apply_filters( 'wptutsplus_sitedescription', get_bloginfo( 'description' ) );?> </h2>
Опять же, это не повлияет на отображаемые данные этого элемента, но это дает вам фильтр, который вы можете использовать, чтобы потом измененить данные.
Добавление Фильтра к Colophon
Дальше я собираюсь добавить фильтр к colophon, который находится в функции, в файле functions.php
. Это позволит пользователям моего фреймворка изменить или исправить содержимое colophon.
Откройте ваш файл functions.php
и найдите этот блок кода:
function wptp_colophon() { ?> <section class="colophon" role="contentinfo"> <small class="copyright half left"> © <a href="<?php echo home_url( '/' ) ?>"><?php bloginfo( 'name' ); ?></a> 2014 </small><!-- #copyright --> <small class="credits half right"> <?php _e( 'Proudly powered by', 'tutsplus' ); ?> <a href="https://wordpress.org/">WordPress</a>. </small><!-- #credits --> </section><!--#colophon--> <?php }
Теперь возьмите линию, где отображается название блога внутри ссылки и возьмите каждую из двух функций в функцию apply_filters()
следующим образом:
function wptp_colophon() { ?> <section class="colophon" role="contentinfo"> <small class="copyright half left"> ©<a href="<?php echo apply_filters( 'wptp_colophon_link', home_url( '/' ) ?>">) ?>"><?php echo apply_filters('wptp_colophon_name', get_bloginfo( 'name' ) ); ?></a> 2014 </small><!-- #copyright --> <small class="credits half right"> <?php _e( 'Proudly powered by', 'tutsplus' ); ?> <a href="http://wordpress.org/">WordPress</a>. </small><!-- #credits --> </section><!--#colophon--> <?php }
Здесь я создала два фильтра:
-
echo apply_filters( 'wptp_colophon_link', home_url( '/' )
относится к ссылке, указывающей на название. -
echo apply_filters('wptp_colophon_name', get_bloginfo( 'name' ) )
относится к самому названию.
Если я захочу позже поменять каждый из них, то я смогу сделать это с помощью простых функций:
function wptp_amend_colophon_name() { $name = 'Rachel McCollin'; return $name; } add_filter( 'wptp_colophon_name', 'wptp_amend_colophon_name' ); function wptp_amend_colophon_link() { $link = 'http://rachelmccollin.co.uk'; return $link; } add_filter( 'wptp_colophon_link', 'wptp_amend_colophon_link' );
Каждая из этих функций возвращает некоторое статическое содержимое на месте php функции в исходном фильтре, заменяя home url и название блога на мое название и на мой url блога:

Заключение
Я добавила пару простых фильтров, которые позволят вам или пользователям вашего фреймворка поменять отображаемые данные без надобности создания нового файла-шаблона. Как вы заметили, фильтр отличается от действия тем, что позволяет вам изменить отображаемое данное, вместо того, чтобы добавить нечто новое в пустую зацепку.
В некоторых случаях вы заметите, что фильтр становится слишком сложным, и тогда вам придется написать новую функцию или иногда даже создать новый файл-шаблон. Например, если бы я захотела сделать более существенные изменения в colophon, то я бы добавила новую функцию под названием wptp_colophon()
в мою чайлд-тему - поскольку функция wptp_colophon()
в фреймворке является заменимой, то моя новая функция ее и заменит. Но, если я захочу поменять весь footer, то мне придется создать новый файл footer.php
.
Фильтры могут быть полезными, однако, чтобы избежать радикальных изменений - когда вы пишите файлы-шаблоны вашего фреймворка, учтите отображаемые данные, которые ваши пользователи захотят изменить, и возьмите их в функцию apply_filters()
.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post