() translation by (you can also view the original English article)
В предыдущих сериях я рассказала о том, как вы можете использовать дочерние темы для создания сайтов, используя фреймворк вашей темы. В этом уроке я расммотрю случаи для возможного создания плагинов вместо дочерних тем.
Когда Нужно Создать Плагин
Иногда сложно определить что использовать, плагин или файл functions.php
вашей дочерней темы, когда нужно добавить функции сайту, который использует ваш фреймворк.
Прежде чем решить, я задаю себе следующие вопросы:



Это поможет вам решить, должны ли вы использовать файл функций вашей дочерней или родительской темы, плагин или вашу начальную дочернюю тему.
Если функции, которые вы добавите, содержат в себе много кода, будут эффективны для других пользователей или будут использованы на других сайтах, которые вы разработали, но не на всех, то создание плагина является наилучшей идеей.
Создание Ваших Плагинов
Если вы решили использовать плагин, тогда вы можете воспользоваться хуками, которые вы добавили вашему фреймворку, и сделать их более эффективными. Например:
- Если ваш плагин добавляет иерархическую функциональность (хлебные крошки), вы можете прикрепить ее результат к хуку-действию
wptp_above_content
для отображения хлебных крошек наверху контента на каждой странице.+ - Если ваш плагин создает более мощное или соответствующее поле для поиска, вы можете прикрепить его к хукам-действиям
wptp_in_header
илиwptp_sidebar
. - Плагин, создающий вызов к дейтсвию (как функция в предыдущем уроке, о дочерних темах), будет прикреплена к хукам
wptp_sidebar
илиwptp_after_content
.
Список продолжается!
Естественно, будут плагины, которые не будут использовать хуки вашего фреймворка, вместо этого будут активировать основные хуки WordPress, но ваши хуки дадут вам дополнительные опции.
Пример Плагина Навигации
Примером является плагин навигации, котоый я создала для использования вместе с моим фреймворком. Он активируется иолько на Страницах, и он сперва проверяет, где в иерархии находится данная страница. Если у Страницы есть дочерние или родительские Страницы, он показывает Страницу верхнего уровня в этой иерархии вместе со списком ее дочерних Страниц, давая вам местную навигацию.
Я использовала этот плагин на сайтах клиентов и прикрепляла его к хуку before_content
или к хуку sidebar
, или к обоим иногда, с дополнительными условными тегами.
Плагин использует две функции: первая, wptp_check_for_page_tree()
, находит данную страницу в списке страниц:
1 |
function wptp_check_for_page_tree() { |
2 |
|
3 |
//start by checking if we're on a page
|
4 |
if( is_page() ) { |
5 |
|
6 |
global $post; |
7 |
|
8 |
// next check if the page has parents
|
9 |
if ( $post->post_parent ) { |
10 |
|
11 |
// fetch the list of ancestors
|
12 |
$parents = array_reverse( get_post_ancestors( $post->ID ) ); |
13 |
|
14 |
// get the top level ancestor
|
15 |
return $parents[0]; |
16 |
|
17 |
}
|
18 |
|
19 |
// return the id - this will be the topmost ancestor if there is one, or the current page if not
|
20 |
return $post->ID; |
21 |
|
22 |
}
|
23 |
|
24 |
}
|
Следующая, wptp_list_subpages()
, проверяет, если мы на странице (но не на главной странице), затем запускает функцию wptp_check_for_page_tree()
и, основываясь на результате, отображает список страниц:
1 |
function wptp_list_subpages() { |
2 |
|
3 |
// don't run on the main blog page
|
4 |
if ( is_page() && ! is_home() ) { |
5 |
|
6 |
// run the wptp_check_for_page_tree function to fetch top level page
|
7 |
$ancestor = wptp_check_for_page_tree(); |
8 |
|
9 |
// set the arguments for children of the ancestor page
|
10 |
$args = array( |
11 |
'child_of' => $ancestor, |
12 |
'depth' => '-1', |
13 |
'title_li' => '', |
14 |
);
|
15 |
|
16 |
// set a value for get_pages to check if it's empty
|
17 |
$list_pages = get_pages( $args ); |
18 |
|
19 |
// check if $list_pages has values
|
20 |
if ( $list_pages ) { |
21 |
|
22 |
// open a list with the ancestor page at the top
|
23 |
?>
|
24 |
<ul class="page-tree"> |
25 |
<?php // list ancestor page ?> |
26 |
<li class="ancestor"> |
27 |
<a href="<?php echo get_permalink( $ancestor ); ?>"><?php echo get_the_title( $ancestor ); ?></a> |
28 |
</li>
|
29 |
|
30 |
<?php
|
31 |
// use wp_list_pages to list subpages of ancestor or current page
|
32 |
wp_list_pages( $args );; |
33 |
|
34 |
// close the page-tree list
|
35 |
?>
|
36 |
</ul>
|
37 |
|
38 |
<?php
|
39 |
}
|
40 |
}
|
41 |
|
42 |
}
|
После инсталляции и активации плагина, вам нужно будет активировать его на вашей дочерней теме, для этого добавьте следующее в ваш файл functions.php
:
1 |
add_action( 'wptp_sidebar', 'wptp_list_subpages' ); |
Конечно, вы можете использовать другой хук-действие, если хотите отобразить сисок в другом месте.
Заключение
Плагины являются частью экосистемы, которую вы создаете как часть вашего фреймворка. Вы можете создать плагины, которые специально будут разработаны для активации с помощью хуков, добавленных в ваш фреймворк, как я показала выше.
Однако, стоит потратить некоторое время, прежде чем написать плагин, если это является правильным решением: если сомневаетесь, обратитесь к инфографике в начале этого урока для окончательного решения.