В последней части этой серии вы добавили несколько хуков действий в ваш каркас темы. В этом уроке вы напишите некоторые функции, которые вы активируете с помощью этих хуков.
Если вы работали с примером кода, в вашей среде есть шесть хуков действий:
-
wptp_in_header
, который находится справа от заголовка -
wptp_before_content
, который находится непосредственно перед циклом -
wptp_after_content
, который находится сразу после цикла -
wptp_sidebar
, который находится в sidebar.php -
wptp_footer
, который находится внутри элементаwptp_footer
колонтитула -
wptp_after_footer
, который находится после элементаwptp_after_footer
колонтитула.
В этом уроке я покажу вам, как добавить области виджетов для трех из них и пользовательскую функцию для последней.
Что вам нужно
Чтобы следовать этому уроку, вам понадобится:
- установка для разработки WordPress
- редактор кода
- Если вы работаете с примером кода, используйте файлы кода из предыдущего урока. Вы можете получить к ним доступ, просмотрев учебник или через репозиторий GitHub для этой серии, ссылка на которую находится вверху этой страницы.
Добавление областей виджетов через функцию
Первый шаг — добавить функцию для областей виджетов. Возможно, вы помните, что они изначально были закодированы в соответствующие файлы шаблонов; однако добавление их через функцию означает, что пользователи вашей платформы могут переопределить функцию позднее, либо полностью удалив области виджетов, либо заменив их чем-то другим.
Создание файла включения для областей виджетов
Поскольку области виджетов добавляются с помощью функций, вы не кодируете их в соответствующих файлах шаблонов. Вы можете добавить их в свой файл functions.php
, но для того, чтобы код был управляемым, я собираюсь добавить включаемый файл с кодом для областей виджетов.
Создайте папку с именем widgets.php
в папке вашей темы и внутри widgets.php
создайте файл с именем widgets.php
. Сохраните файл.
Теперь откройте ваш файл functions.php
и добавьте следующее перед вашими другими функциями:
1
2
|
// include for widgets
include( TEMPLATEPATH . ‘/includes/widgets.php’ );
|
Это эффективно вытягивает содержимое этого файла widgets.php
в это место в вашем файле функций.
Теперь сохраните ваш файл функций.
Область виджетов в заголовке
Сначала давайте добавим область виджета в заголовок. Откройте новый файл widgets.php
и добавьте это:
1
2
3
4
5
6
7
8
|
function wptp_in_header_widget_area() {
if ( is_active_sidebar( ‘in-header-widget-area’ ) ) { ?>
<aside class=»in-header widget-area» role=»complementary»>
<?php dynamic_sidebar( ‘in-header-widget-area’ );
</aside>
<?php }
}
add_action( ‘wptp_in_header’, ‘wptp_in_header_widget_area’ );
|
Функция wptp_in_header_widget_area()
добавляет код для области виджета в правильном месте. Сначала он проверяет, заполнена ли область виджетов виджетами, используя if( is_active_sidebar)
, затем, если это так, выводит виджет в элементе aside
.
Функция активируется через wptp_in_header
действия wptp_in_header
который вы добавили в файл header.php
в последнем уроке. Это заменяет код для области виджета, который был первоначально в header.php
.
Выполнение этого означает, что если вы хотите удалить область виджетов для сайта, работающего на дочерней теме, вы можете сделать это с помощью remove_action()
, например, так:
1
|
remove_action( ‘wptp_in_header’, ‘wptp_in_header_widget_area’ );
|
Это также означает, что вы можете добавить дополнительные функции, которые активируются через тот же хук, поэтому, если вы хотите добавить, например, кнопку вызова к действию над областью виджета, вы должны создать функцию, содержащую код, а затем прикрепить ее к wptp_in_header
действия wptp_in_header
с приоритетом меньше 10, так как это приоритет по умолчанию, который будет дан выше функции области виджета. Функции с более низким значением их приоритета запускаются первыми.
1
2
3
4
|
function wptp_add_cta() {
//code for cta here
}
add_action( ‘wptp_in_header’ , ‘wttp_add_cta’, 5 );
|
Обратите внимание, что вы можете узнать больше о функции add_action()
в Кодексе WordPress .
Область виджетов на боковой панели
Следующим шагом является добавление области виджетов на боковой панели, используя аналогичный фрагмент кода, который вы также добавляете в свой файл widgets.php
:
1
2
3
4
5
6
7
8
|
function wptp_sidebar_widget_area() {
if ( is_active_sidebar( ‘sidebar-widget-area’ ) ) { ?>
<aside class=»sidebar widget-area» role=»complementary»>
<?php dynamic_sidebar( ‘sidebar-widget-area’ );
</aside>
<?php }
}
add_action( ‘wptp_sidebar’, ‘wptp_sidebar_widget_area’ );
|
Это добавляет область виджета на боковой панели, если она заполнена, с соответствующими классами, чтобы идентифицировать ее для стиля.
Область виджета нижнего колонтитула
Наконец, давайте добавим виджеты в нижний колонтитул. Я собираюсь добавить четыре области виджета нижнего колонтитула — вы можете решить добавить меньше, если это все, что требует ваша структура. Мои области виджетов используют классы, которые используют объектно-ориентированный CSS в моей теме.
Снова в widgets.php
добавьте следующее:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
function wptp_footer_widget_area() { ?>
<aside class=»fatfooter» role=»complementary»>
<?php
// the first widget area
if ( is_active_sidebar( ‘first-footer-widget-area’ ) ) { ?>
<aside class=»first quarter left widget-area»>
<?php dynamic_sidebar( ‘first-footer-widget-area’ );
</aside><!— .first .widget-area —>
<?php }
// the second widget area
if ( is_active_sidebar( ‘second-footer-widget-area’ ) ) { ?>
<aside class=»second quarter widget-area»>
<?php dynamic_sidebar( ‘second-footer-widget-area’ );
</aside><!— .first .widget-area —>
<?php }
// the third widget area
if ( is_active_sidebar( ‘third-footer-widget-area’ ) ) { ?>
<aside class=»third quarter widget-area»>
<?php dynamic_sidebar( ‘third-footer-widget-area’ );
</aside><!— .first .widget-area —>
<?php }
// the fourth widget area
if ( is_active_sidebar( ‘fourth-footer-widget-area’ ) ) { ?>
<aside class=»fourth right quarter widget-area»>
<?php dynamic_sidebar( ‘fourth-footer-widget-area’ );
</aside><!— .first .widget-area —>
<?php } ?>
</aside>
<?php
}
add_action( ‘wptp_footer’, ‘wptp_footer_widget_area’ );
|
Это добавляет четыре области виджета в элементе fatfooter
классом fatfooter
— в моей теме это используется для стилей, то есть фон полной ширины может быть применен к элементу aside.fatfooter
footer
то время aside.fatfooter
элемент aside.fatfooter
может быть центрирован на экране. ,
Добавив некоторые виджеты в мои области виджетов, вы можете увидеть, как выглядит моя страница:
Добавление функции для колофона
Помимо областей виджетов, я собираюсь добавить функцию к моей теме, которая вставляет текст для колофона. Это будет активировано через хук wptp_after_footer
, поэтому он будет отображаться в самом низу экрана.
Поскольку это не виджет, я собираюсь добавить код в мой файл functions.php
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
function wptp_colophon() { ?>
<section class=»colophon» role=»contentinfo»>
<small class=»copyright half left»>
©
</small><!— #copyright —>
<small class=»credits half right»>
<?php _e( ‘Proudly powered by’, ‘tutsplus’ );
</a>
</small><!— #credits —>
</section><!—#colophon—>
<?php
}
|
Это добавляет элемент section, содержащий код для колофона. Теперь вы можете увидеть колофон на моем сайте:
Как вы можете видеть, текст по умолчанию для ссылки об авторских правах — это заголовок сайта. Если бы я захотел переопределить это в дочерней теме, я мог бы легко это сделать, создав новую функцию, подключенную к wptp_after_footer
действий wptp_after_footer
, и удалив исходную функцию с помощью remove_action()
:
1
|
remove_action( ‘wptp_after_footer’, ‘wptp_colophon’ );
|
В качестве альтернативы я мог бы сделать мою исходную функцию подключаемой , что означает, что она не активируется, если WordPress уже встречал другую функцию с таким же именем (например, в дочерней теме). Я бы сделал это, поместив функцию в условную функцию, например так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
if ( ! function_exists( ‘wptp_colophon’ ) ) {
function wptp_colophon() { ?>
<section class=»colophon» role=»contentinfo»>
<small class=»copyright half left»>
©
</small><!— #copyright —>
<small class=»credits half right»>
<?php _e( ‘Proudly powered by’, ‘tutsplus’ );
</a>
</small><!— #credits —>
</section><!—#colophon—>
<?php
}
}
add_action( ‘wptp_after_footer’, ‘wptp_colophon’ );
|
Если я затем добавлю функцию с именем wptp_colophon
в мою wptp_colophon
тему, WordPress запустит ее, а не ту, что в родительской теме. Аккуратно, а?
Обратите внимание, что в этом случае еще лучшим решением для нацеливания текста в ссылке об авторском праве было бы заключить этот код в ловушку фильтра. Мы рассмотрим это в следующей части этой серии.
Резюме
Ваш фреймворк WordPress теперь имеет некоторые функции. В этом уроке я показал вам, как использовать хуки действий, которые вы создали ранее, для активации функций, которые вы добавляете в файл functions.php
или во включаемый файл, который вы создаете в своей теме.
В первой части этой серии я упоминал, что зрелая тематическая структура — это больше, чем просто родительская тема: это экосистема. Это означает, что вы будете использовать ловушки действий в своей теме, чтобы активировать функции в плагинах, которые вы пишете специально для сайтов, работающих на тему или на ее дочерних элементах.
Многие из популярных фреймворков WordPress делают это, и нет никаких причин, почему вы не можете. Например, вы можете написать плагин для добавления пользовательских боковых панелей на сайт, а затем активировать его с помощью хука wptp_sidebar
.
Это может быть полезно, если плагин используется более чем на одном сайте, поэтому вы будете дублировать свой код, если добавите его в соответствующие дочерние темы. Я сделал это сам, когда сайту нужна была боковая панель со списком страниц в той же части иерархии страниц сайта — это общий код, который полезен для нескольких сайтов.
В следующей части этой серии вы узнаете, как сделать следующий шаг, и добавите ловушки фильтров в вашу среду.