Пользовательские таксономии WordPress — отличный способ упорядочить контент вашего веб-сайта, но что именно? Как они могут быть эффективно реализованы? Что еще более важно, как они могут принести пользу вашему сайту? Не бойтесь, то, что вы собираетесь прочитать в следующем, является наиболее полным руководством по пользовательской таксономии WordPress, которое вы найдете сегодня в Интернете.
Основы пользовательской таксономии
На самом базовом уровне таксономия — это просто метод группировки вещей. Если вы уже публиковали пост в WordPress, скорее всего, вы уже использовали таксономии. Стандартные теги и категории в WordPress считаются таксономиями! Теперь поговорим подробнее о пользовательских таксономиях. WordPress позволяет создавать свои собственные таксономии начиная с версии 2.3, однако, они только начали становиться популярными начиная с версии 2.9.
Популярный способ объяснения пользовательских таксономий — использовать пример фильмов. Давайте представим, что мы пишем статью о фильме «Терминатор 2». Что мы обычно делаем со стандартными встроенными таксономиями, так это классифицируем статью, используя теги и категории. Проблема со встроенными таксономиями в том, что они чрезвычайно универсальны.
Мы продолжим этот пример и представим, что мы ввели «Арнольд Шварценеггер» в качестве одного из наших тегов. Для тех, кто не знаком с австрийским актером, это может сбить с толку. Это, очевидно, имя человека, но является ли этот человек актером? Режиссер? Производитель? Гораздо лучшим подходом было бы создание собственной таксономии под названием «Актеры» и добавление имени Арнольда в эту конкретную таксономию. Мы могли бы пойти еще дальше и добавить дополнительные пользовательские таксономии для других типичных групп фильмов, таких как жанры, режиссеры, продюсеры и другие.
Понимание условий
Одно слово, с которым вам также стоит ознакомиться, — это «термин». В WordPress термин — это отдельная классификация, которая живет внутри и определяется ее таксономией. В нашем предыдущем примере у нас была таксономия под названием «Актеры», поэтому наши термины были бы такими: Арнольд Шварценеггер, Линда Гамильтон, Эдвард Фарлонг и т. Д.
Как пользовательские таксономии могут принести пользу моему сайту?
Пользовательские таксономии могут значительно повысить организацию и удобство использования вашего сайта. Благодаря гибкости, которая обеспечивается пользовательскими таксономиями, они всегда будут более специфичными для выбранной вами темы по сравнению с тегами и категориями. Очевидным примером является включение вашей таксономии внизу или вверху вашей статьи. В приведенном ниже примере я создал три пользовательских таксономии и отобразил связанные термины под основной областью содержимого статьи.
Круто верно? Это не единственное использование, хотя. В приведенном выше примере вы заметите, что текст выглядит гиперссылочным, потому что это так. Пользовательские таксономии позволяют вам иметь архивы для конкретных условий. Это не только позволяет лучше организовать контент, но и позволяет пользователям подписываться на определенные условия через RSS. Еще одно менее эффективное использование пользовательских таксономий — просто использовать их в качестве замены тегов. Я решил использовать именно этот подход для недавно запущенного игрового блога . Вам не всегда нужно выделять тот факт, что вы используете пользовательские таксономии, просто помните, что их реальная сила заключается в потенциале превосходного архивирования, поиска, запросов и структуры URL.
Существуют различные другие преимущества использования пользовательских таксономий, но вместо того, чтобы обсуждать теоретические варианты использования, давайте вместо этого рассмотрим некоторые практические примеры с кодом для его резервного копирования.
Написание нашей первой таксономии
Теперь, когда мы понимаем, что такое таксономии и как их использовать, мы можем начать внедрять их в наши темы. Для начала мы сначала зарегистрируем нашу пользовательскую таксономию. В этом примере я создаю таксономию под названием «Актеры». Если вы читаете этот урок, вам нужно открыть файл functions.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
|
$labels = array(
‘name’ => __( ‘Actors’, ‘your-themes-text-domain’ ),
‘singular_name’ => __( ‘Actor’, ‘your-themes-text-domain’ ),
‘search_items’ => __( ‘Search Actors’, ‘your-themes-text-domain’ ),
‘popular_items’ => __( ‘Popular Actors’, ‘your-themes-text-domain’ ),
‘all_items’ => __( ‘All Actors’, ‘your-themes-text-domain’ ),
‘parent_item’ => __( ‘Parent Actor’, ‘your-themes-text-domain’ ),
‘edit_item’ => __( ‘Edit Actor’, ‘your-themes-text-domain’ ),
‘update_item’ => __( ‘Update Actor’, ‘your-themes-text-domain’ ),
‘add_new_item’ => __( ‘Add New Actor’, ‘your-themes-text-domain’ ),
‘new_item_name’ => __( ‘New Actor’, ‘your-themes-text-domain’ ),
‘separate_items_with_commas’ => __( ‘Separate Actors with commas’, ‘your-themes-text-domain’ ),
‘add_or_remove_items’ => __( ‘Add or remove Actors’, ‘your-themes-text-domain’ ),
‘choose_from_most_used’ => __( ‘Choose from most used Actors’, ‘your-themes-text-domain’ )
);
$args = array(
‘labels’ => $labels,
‘public’ => true,
‘hierarchical’ => false,
‘show_ui’ => true,
‘show_in_nav_menus’ => true,
‘query_var’ => true
);
register_taxonomy( ‘actors’, ‘post’, $args );
|
Не пугайтесь количества кода здесь, все довольно просто, когда вы разбиваете его. Большая часть кода находится в массиве $labels
. Этот массив определяет содержимое определенных меток в панели управления WordPress. В массиве $args
происходит настоящее волшебство; это определяет настройки для таксономии.
Вы заметите, что для аргумента «метки» мы передаем массив меток, который мы создали ранее. Другой заслуживающий упоминания аргумент — это «иерархический» аргумент. Это определяет, имеют ли наши таксономии возможность вложенных таксономий или «дочерних» таксономий. В нашем примере нам не потребуется эта конкретная функциональность, но обратите внимание на ее существование, поскольку в будущих проектах вам может потребоваться система детальной таксономии.
Объяснение каждого аргумента выходит за рамки этого конкретного руководства, но если вы хотите узнать больше, вы всегда можете подробно изучить эти аргументы на официальной странице codep register_taxonomy
WordPress .
Последнее, на что следует обратить внимание, — это вызов функции register_taxonomy
. Первый аргумент определяет имя таксономии (это используется внутри WordPress). Второй аргумент определяет, к какому типу записей будет прикреплена таксономия. В нашем сценарии мы прикрепляем его к стандартным постам WordPress. Кроме того, вы можете прикрепить его к пользовательскому типу записи или даже к нескольким различным типам записей, передав ему массив типов записей.
Теперь, когда мы успешно зарегистрировали нашу пользовательскую таксономию, вы заметите, что теперь у нас есть мета-поле «Актеры», расположенное в правом столбце на странице редактирования поста WordPress. На этом этапе добавление терминов в этот мета-блок сохранит их в базе данных, но не отобразит их в начале вашей темы. Давайте реализуем представленный выше пример с тремя списками таксономии, расположенными внизу поста.
В этом примере вам нужно будет продублировать код, используемый для двойной регистрации таксономии актеров, и переименовать метки, чтобы они отражали наши дополнительные таксономии, жанры и авторов. Вот как выглядит мой файл functions.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
$labels = array(
‘name’ => __( ‘Actors’, ‘your-themes-text-domain’ ),
‘singular_name’ => __( ‘Actor’, ‘your-themes-text-domain’ ),
‘search_items’ => __( ‘Search Actors’, ‘your-themes-text-domain’ ),
‘popular_items’ => __( ‘Popular Actors’, ‘your-themes-text-domain’ ),
‘all_items’ => __( ‘All Actors’, ‘your-themes-text-domain’ ),
‘parent_item’ => __( ‘Parent Actor’, ‘your-themes-text-domain’ ),
‘edit_item’ => __( ‘Edit Actor’, ‘your-themes-text-domain’ ),
‘update_item’ => __( ‘Update Actor’, ‘your-themes-text-domain’ ),
‘add_new_item’ => __( ‘Add New Actor’, ‘your-themes-text-domain’ ),
‘new_item_name’ => __( ‘New Actor’, ‘your-themes-text-domain’ ),
‘separate_items_with_commas’ => __( ‘Separate Actors with commas’, ‘your-themes-text-domain’ ),
‘add_or_remove_items’ => __( ‘Add or remove Actors’, ‘your-themes-text-domain’ ),
‘choose_from_most_used’ => __( ‘Choose from most used Actors’, ‘your-themes-text-domain’ )
);
$args = array(
‘labels’ => $labels,
‘public’ => true,
‘hierarchical’ => false,
‘show_ui’ => true,
‘show_in_nav_menus’ => true,
‘query_var’ => true
);
register_taxonomy( ‘actors’, ‘post’, $args );
$labels = array(
‘name’ => __( ‘Genres’, ‘your-themes-text-domain’ ),
‘singular_name’ => __( ‘Genre’, ‘your-themes-text-domain’ ),
‘search_items’ => __( ‘Search Genres’, ‘your-themes-text-domain’ ),
‘popular_items’ => __( ‘Popular Genres’, ‘your-themes-text-domain’ ),
‘all_items’ => __( ‘All Genres’, ‘your-themes-text-domain’ ),
‘parent_item’ => __( ‘Parent Genre’, ‘your-themes-text-domain’ ),
‘edit_item’ => __( ‘Edit Genre’, ‘your-themes-text-domain’ ),
‘update_item’ => __( ‘Update Genre’, ‘your-themes-text-domain’ ),
‘add_new_item’ => __( ‘Add New Genre’, ‘your-themes-text-domain’ ),
‘new_item_name’ => __( ‘New Genre’, ‘your-themes-text-domain’ ),
‘separate_items_with_commas’ => __( ‘Separate Genres with commas’, ‘your-themes-text-domain’ ),
‘add_or_remove_items’ => __( ‘Add or remove Genres’, ‘your-themes-text-domain’ ),
‘choose_from_most_used’ => __( ‘Choose from most used Genres’, ‘your-themes-text-domain’ )
);
$args = array(
‘labels’ => $labels,
‘public’ => true,
‘hierarchical’ => false,
‘show_ui’ => true,
‘show_in_nav_menus’ => true,
‘query_var’ => true
);
register_taxonomy( ‘genres’, ‘post’, $args );
$labels = array(
‘name’ => __( ‘Writers’, ‘your-themes-text-domain’ ),
‘singular_name’ => __( ‘Writer’, ‘your-themes-text-domain’ ),
‘search_items’ => __( ‘Search Writers’, ‘your-themes-text-domain’ ),
‘popular_items’ => __( ‘Popular Writers’, ‘your-themes-text-domain’ ),
‘all_items’ => __( ‘All Writers’, ‘your-themes-text-domain’ ),
‘parent_item’ => __( ‘Parent Writer’, ‘your-themes-text-domain’ ),
‘edit_item’ => __( ‘Edit Writer’, ‘your-themes-text-domain’ ),
‘update_item’ => __( ‘Update Writer’, ‘your-themes-text-domain’ ),
‘add_new_item’ => __( ‘Add New Writer’, ‘your-themes-text-domain’ ),
‘new_item_name’ => __( ‘New Writer’, ‘your-themes-text-domain’ ),
‘separate_items_with_commas’ => __( ‘Separate Writers with commas’, ‘your-themes-text-domain’ ),
‘add_or_remove_items’ => __( ‘Add or remove Writers’, ‘your-themes-text-domain’ ),
‘choose_from_most_used’ => __( ‘Choose from most used Writers’, ‘your-themes-text-domain’ )
);
$args = array(
‘labels’ => $labels,
‘public’ => true,
‘hierarchical’ => false,
‘show_ui’ => true,
‘show_in_nav_menus’ => true,
‘query_var’ => true
);
register_taxonomy( ‘writers’, ‘post’, $args );
|
Теперь, когда мы зарегистрировали наши три таксономии, мы готовы начать отображать наши недавно созданные таксономии и термины в рамках нашей темы. Просто не забудьте отредактировать существующий пост, чтобы добавить несколько фиктивных терминов в новые мета-блоки таксономии.
Вставьте следующий код внизу вашего файла functions.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
39
40
41
|
function display_post_taxonomies( $content ) {
if( is_single() ) {
$args = array( ‘public’ => true, ‘_builtin’ => false );
$output = ‘objects’;
$operator = ‘and’;
$taxonomies = get_taxonomies( $args, $output, $operator );
if( $taxonomies ) {
$content .= ‘<div class=»taxonomy_container»>’;
foreach( $taxonomies as $taxonomy ) {
$args = array(
‘orderby’ => ‘name’,
‘echo’ => false,
‘taxonomy’ => $taxonomy->name,
‘title_li’ => ‘<span class=»taxonomy_title»>’ .
‘show_option_none’ => __( ‘No ‘ . $taxonomy->labels->name, ‘your-themes-text-domain’ )
);
$content .= ‘<ul>’ .
}
$content .= ‘</div>’;
}
}
return $content;
}
add_filter( ‘the_content’, ‘display_post_taxonomies’ );
|
Короче говоря, мы фильтруем содержимое поста, чтобы добавить наш собственный раздел таксономии внизу поста. Использование фильтра вместо тега шаблона означает, что мы избегаем редактирования определенных файлов шаблона. Это не только проще, но и позволяет более гибко использовать этот код в нескольких темах.
Вы также заметите, что эта функция чрезвычайно общая; мы вовсе не ссылаемся на таксономии, которые мы создали ранее. Приведенный выше код только захватывает пользовательские таксономии, вызывая функцию get_taxonomies
с индексом массива args « built_in
», установленным в false, гарантирует, что мы не get_taxonomies
никакие связанные таксономии WordPress.
Затем мы перебираем наши таксономии и начинаем добавлять дополнительные элементы HTML для форматирования. В нашем цикле мы также используем функцию wp_list_categories
. Эта функция подготавливает неупорядоченный список терминов для данной таксономии. Он не только обрабатывает подготовку структуры HTML, но также автоматически связывает каждый отдельный термин с соответствующей страницей архива.
Теперь, если вы загрузите свое сообщение, вы заметите, что у вас есть набор из трех неупорядоченных списков, каждый из которых отображает заголовок таксономии с соответствующими терминами внизу. Проблема в том, что пока нет стиля. Добавьте следующий код в файл themes style.css, чтобы немного улучшить его.
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
39
40
41
42
|
.taxonomy_container {
overflow: hidden;
display: block;
clear: both;
margin-bottom: 20px;
}
.taxonomy_container ul {
margin: 0px;
padding: 0px;
list-style-type: none;
}
.taxonomy_container > ul {
width: 31%;
float: left;
margin-right: 3.5%;
}
.taxonomy_container > ul:last-child {
margin-right: 0%;
}
.taxonomy_title {
padding-left: 2px;
padding-bottom: 2px;
border-bottom: 2px solid #333;
display: block;
margin-bottom: 2px;
font-weight: bold;
}
.taxonomy_container > ul li ul li {
padding-left: 2px;
padding-bottom: 3px;
border-bottom: 1px dotted #ccc;
margin-bottom: 3px;
}
.taxonomy_container > ul li ul li:last-child {
border-bottom: 0px;
}
|
Вывод
Там у вас есть люди; часть первая из нашего руководства по переходу пользовательских таксономий WordPress на новый уровень. Сегодня мы рассмотрели, что такое пользовательские таксономии, в чем они хороши и как их эффективно реализовать в вашей теме. В следующей статье мы рассмотрим настройку шаблонов таксономии и архива терминов.