Вопрос или проблема
Я работаю над тонкой настройкой шаблона, который имеет фильтруемую мейсонри-разметку. Я создал taxonomy-categories.php, и для фильтрации мне нужны термины активной таксономии. Шаблон, который я использую, имеет следующий код внутри
<ul id="filter">
<li><a href="#" class="current" data-filter="*" title="">*</a></li>
<?php
$categories = get_terms('categories');
foreach( (array)$categories as $categorie){
$cat_name = $categorie->name;
$cat_slug = $categorie->slug;
?>
<li><a href="#" data-filter=".<?php echo esc_attr($cat_slug); ?>"><?php echo esc_attr($cat_name); ?></a></li>
<?php } ?>
</ul>
Как видите, он берет все термины из всей таксономии. Я хочу, чтобы он брал только подтермины активной таксономии.
Так что если я нахожусь на URL example.com/portfolio/name_of_cat_one, я хочу перечислить дочерние категории этой категории.
Я знаю, что могу сделать это с помощью get_term_by
и немного подкорректировать, чтобы достичь своей цели, но после многих часов попыток безуспешно я в конце концов решил спросить здесь 🙂
Что ж, я это сделал..
<ul id="filter">
<li><a href="#" class="current" data-filter="*" title="">*</a></li>
<?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?>
<?php
$term_id = $term->term_id;
$taxonomy_name="categories";
$termchildren = get_term_children( $term_id, $taxonomy_name );
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo '<li><a href="#" data-filter=".' . $term->slug . '">' . $term->name . '</a></li>';
}
?>
</ul>
.
Ответ или решение
Как получить активные термины таксономии в WordPress
Если вы работаете с шаблонами WordPress и настраиваете фильтруемую макетную сетку, вам, вероятно, потребуется извлекать только подтермины для активной таксономии. В данном случае вы уже создали файл taxonomy-categories.php
и хотите, чтобы он выводил только дочерние термины для текущей категории. Здесь мы подробно разберём, как это сделать, используя стандартные функции WordPress.
Шаг 1: Получение текущего термина
Для начала вам нужно получить текущий термин. Это делается с помощью функции get_term_by()
. Вам необходимо передать параметры, чтобы правильно получить термин, соответствующий текущему URL. Например:
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
Здесь get_query_var('term')
получает значение термина из URL, а get_query_var('taxonomy')
— текущую таксономию. Убедитесь, что правильно указаны названия полей.
Шаг 2: Получение подтерминов
После того как вы получили активный термин, следующим шагом будет извлечение его подтерминов. Это можно сделать с помощью функции get_term_children()
:
$term_id = $term->term_id;
$taxonomy_name = "categories"; // Замените на ваше название таксономии
$termchildren = get_term_children($term_id, $taxonomy_name);
Шаг 3: Вывод подтерминов
Теперь, когда вы получили массив подтерминов в переменной $termchildren
, вы можете использовать цикл foreach
, чтобы пройтись по ним и вывести термины в нужном формате:
<ul id="filter">
<li><a href="#" class="current" data-filter="*" title="">*</a></li>
<?php foreach ($termchildren as $child) {
$term = get_term_by('id', $child, $taxonomy_name);
echo '<li><a href="#" data-filter=".' . esc_attr($term->slug) . '">' . esc_html($term->name) . '</a></li>';
} ?>
</ul>
Полный код
Ниже представлен полный код, который вы можете использовать в вашем шаблоне:
<ul id="filter">
<li><a href="#" class="current" data-filter="*" title="">*</a></li>
<?php
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
if ($term) {
$term_id = $term->term_id;
$taxonomy_name = "categories"; // Укажите вашу таксономию
$termchildren = get_term_children($term_id, $taxonomy_name);
foreach ($termchildren as $child) {
$term = get_term_by('id', $child, $taxonomy_name);
echo '<li><a href="#" data-filter=".' . esc_attr($term->slug) . '">' . esc_html($term->name) . '</a></li>';
}
} else {
echo '<li>Нет подтерминов.</li>'; // Обработка случая, если термин не найден
}
?>
</ul>
Заключение
Теперь вы знаете, как получать активные подтермины текущей таксономии и выводить их в формате, подходящем для фильтров в вашем шаблоне WordPress. Данный подход позволяет динамически подгружать термины в зависимости от контекста, что улучшает пользовательский опыт и влияет на SEO вашего ресурса.
Не забывайте, что при работе с пользовательскими таксономиями всегда полезно проверять, существуют ли термины, прежде чем пытаться их вывести, чтобы избежать ошибок отображения.