Вопрос или проблема
Этот код использует плагин Taxonomy Images для отображения изображений для категорий. Этот код отображает подкатегории главной категории на странице родительской категории (category.php
), но я хочу отображать только один уровень подкатегорий на странице, например:
аппаратное обеспечение (родительская категория)
-
монитор (первая уровень подкатегории аппаратного обеспечения)
-
Samsung (вторая уровень подкатегории)
- LCD (третья уровень подкатегории)
-
Когда пользователь кликает на ссылку аппаратного обеспечения, он должен видеть только ссылку на подкатегорию монитор. При повторном нажатии на монитор он должен видеть ссылку на категорию Samsung, и при нажатии на Samsung подкатегория LCD будет отображаться. Как мне изменить этот код, чтобы выполнить свою задачу?
Мой код:
<?php
$cat_id = get_query_var('cat');
$catlist = get_categories('hide_empty=0&child_of=" . $cat_id);
echo "<ul>";
foreach($catlist as $categories_item)
{
echo "<h1><a href="' . get_category_link( $categories_item->term_id ) . '" title="' . sprintf( __( "Просмотреть все продукты в %s" ), $categories_item->name ) . '" ' . '>' . $categories_item->name.'</a> </h1> ';
echo '<div class="categoryoverview clearfix">';
$terms = apply_filters( 'taxonomy-images-get-terms', '' );
if ( ! empty( $terms ) ) {
foreach( (array) $terms as $term ) {
if($term->term_id == $categories_item->term_id) {
print '<a href="' . esc_url( get_term_link( $term, $term->taxonomy ) ) . '">' . wp_get_attachment_image( $term->image_id, 'thumbnail' );
echo '</a>';
}
}
echo '<p>'. $categories_item->description; echo '</p>';
}
echo '</div>';
}
echo "</ul>";
?>
Я предполагаю, что вы используете плагин Taxonomy Images?
Этот код:
if($term->term_id == $categories_item->term_id) {
Можно изменить на:
if($term->term_id == $categories_item->term_id && $term->parent == $categories_item->cat_ID) {
Таким образом, вы проверяете, совпадает ли родительский ID term
с ID categories_item
.
Родительская категория (аппаратное обеспечение) должна отображаться на любой странице, получая все родительские категории с помощью
$parent_category = get_categories(array('orderby' => 'name','parent' => 0));
foreach($categories as $category) {
echo '<p>Категория: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Просмотреть все посты в %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
}
Когда вы кликаете по категории, она перенаправит вас на страницу category.php
. На странице category.php вы получите все категории, родитель которых – аппаратное обеспечение.
get_categories(array('parent' => 'hardware_category_id/its_sub_category_id',
'hide_empty' => 1,));
Затем вам следует отображать все подкатегории аппаратного обеспечения. Отобразите эти категории в теге <a></a>
, как мы делали ранее. Каждый раз, когда вы кликаете на ссылку подкатегории, вы снова попадаете на страницу category.php
, и она берет ID категории как ID подкатегории и показывает подкатегории подкатегории. Это будет происходить в цикле.
Плагин Taxonomy Images, который вы используете, может все это обработать. Фильтр taxonomy-images-get-terms
может принимать третий аргумент, который может включать массив аргументов для базовой функции WP get_terms().
Каждый, кто не использует этот плагин, может воспользоваться вызовом get_terms
.
Если вы укажете текущую категорию в качестве родительского аргумента, вы должны получить все подкатегории в ответ. Только детей, одного уровня, а не всех более глубоких потомков.
Вы можете использовать это в файле category.php
вашей темы для генерации отображения односторонних подкатегорий текущей категории.
$cat_id = get_query_var('cat');
$catlist = apply_filters(
'taxonomy-images-get-terms',
'',
array(
'parent' => $cat_id,
)
);
foreach ( $catlist as $cat ) {
echo '<a href="';
echo esc_url( get_term_link( $cat->term_id, $cat->taxonomy ) );
echo '">';
echo wp_get_attachment_image( $cat->image_id, 'thumbnail' );
echo '<p>';
echo $cat->description;
echo '</p>';
echo '</a>';
}
Вы также можете использовать wp_list_categories
. У нее есть возможность установить глубину.
Ответ или решение
Для отображения только одного уровня подкатегорий в WordPress, вы можете адаптировать свой код, используя функции, предоставляемые WordPress. Ниже я приведу пример кода, который поможет вам решить вашу задачу.
Шаг 1: Получение идентификатора категории
Сначала вам нужно получить идентификатор текущей категории, чтобы на его основе получить подкатегории.
$cat_id = get_query_var('cat');
Шаг 2: Получение подкатегорий
Используйте функцию get_categories()
или примените фильтр, предоставляемый плагином Taxonomy Images, чтобы получить только однопуровневые подкатегории:
$catlist = get_categories(array(
'parent' => $cat_id,
'hide_empty' => 0, // Установите в 1, если хотите скрыть пустые категории
));
Шаг 3: Вывод подкатегорий
Теперь, используя цикл foreach
, вы можете вывести каждую подкатегорию и добавить ссылку на нее. Если вы используете плагин для изображения категорий, учтите это при выводе:
echo "<ul>";
foreach ($catlist as $category_item) {
echo "<li>";
echo '<h1><a href="' . get_category_link($category_item->term_id) . '" title="' . sprintf(__("Просмотр всех продуктов в %s"), $category_item->name) . '">' . $category_item->name . '</a></h1>';
// Получение и вывод изображения категории
$terms = apply_filters('taxonomy-images-get-terms', '', array('parent' => $category_item->term_id));
if (!empty($terms)) {
foreach ($terms as $term) {
if ($term->term_id == $category_item->term_id) {
echo '<a href="' . esc_url(get_term_link($term, $term->taxonomy)) . '">';
echo wp_get_attachment_image($term->image_id, 'thumbnail');
echo '</a>';
}
}
}
echo '<p>' . $category_item->description . '</p>';
echo "</li>";
}
echo "</ul>";
Шаг 4: Добавление ссылки на подкатегории в категории
Чтобы при переходе к родительской категории отображались только ее подкатегории, в шаблоне category.php
используйте полученный выше код. Этот код проверит, есть ли у категории подкатегории, и отобразит их, переходя от одной к другой.
Теперь, когда пользователь перейдет по ссылке категории "Аппаратное обеспечение", он увидит только ссылку на подкатегорию "Монитор". После этого, перейдя по ней, он увидит подкатегорию "Samsung", и при последующем клике откроется категория "LCD".
Заключение
Таким образом, вы можете настроить свой код для вывода только одного уровня подкатегорий на странице категории. Убедитесь, что используете правильные идентификаторы категорий и делаете проверку на наличие подкатегорий. Этот подход обеспечит удобную навигацию для ваших пользователей.