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



Заключение
Я добавила пару простых фильтров, которые позволят вам или пользователям вашего фреймворка поменять отображаемые данные без надобности создания нового файла-шаблона. Как вы заметили, фильтр отличается от действия тем, что позволяет вам изменить отображаемое данное, вместо того, чтобы добавить нечто новое в пустую зацепку.
В некоторых случаях вы заметите, что фильтр становится слишком сложным, и тогда вам придется написать новую функцию или иногда даже создать новый файл-шаблон. Например, если бы я захотела сделать более существенные изменения в colophon, то я бы добавила новую функцию под названием wptp_colophon()
в мою чайлд-тему - поскольку функция wptp_colophon()
в фреймворке является заменимой, то моя новая функция ее и заменит. Но, если я захочу поменять весь footer, то мне придется создать новый файл footer.php
.
Фильтры могут быть полезными, однако, чтобы избежать радикальных изменений - когда вы пишите файлы-шаблоны вашего фреймворка, учтите отображаемые данные, которые ваши пользователи захотят изменить, и возьмите их в функцию apply_filters()
.