Отобразить только одну подкатегорию в WordPress

Вопрос или проблема

Этот код использует плагин 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".

Заключение

Таким образом, вы можете настроить свой код для вывода только одного уровня подкатегорий на странице категории. Убедитесь, что используете правильные идентификаторы категорий и делаете проверку на наличие подкатегорий. Этот подход обеспечит удобную навигацию для ваших пользователей.

Оцените материал
Добавить комментарий

Капча загружается...