Как получить связанные категории на архивной странице WordPress

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

Я использую WooCommerce в WordPress. У меня есть несколько категорий продуктов, например, такие:

Пример:

Категория продукта 1 (//родительская)
-- Категория 1
-- Категория 2
-- Категория 3
-- Категория 4
Категория продукта 2 (//родительская)
-- Категория 10
-- Категория 11
-- Категория 12
-- Категория 13

Если я нахожусь на архивной странице для Категории 2 (подкатегория), как мне получить все другие названия категорий под родительской категорией (Категория продукта 1) в виде списка.

Что я пробую

$args = array(
       'hierarchical' => 1,
       'show_option_none' => '',
       'hide_empty' => 0,
       'parent' => $parent_cat_ID,
       'taxonomy' => 'product_cat'
   );
$subcats = get_categories($args);
echo '<ul class="wooc_sclist">';
foreach ($subcats as $sc) {
       $link = get_term_link( $sc->slug, $sc->taxonomy );
echo '<li><a href="'. $link .'">'.$sc->name.'</a></li>';
     }
echo '</ul>';
}

Вывод должен быть:

.Категория 1
.Категория 2
.Категория 3
.Категория 4

Я использовал следующий код, который работает нормально на странице single-product.php –

<?php 
 $parent = get_category_parents( $cat, true, ' &raquo; ' ); 
echo $product->get_categories( ', ', '<span>' . _n( 'Категория:', 'Категории:', sizeof( get_the_terms( $post->ID, 'product_cat' ) ), 'woocommerce' ) . ' ', '.</span>' ); 
?>

Обычно я делаю это, получая данные из базы данных

$result = mysql_query("SELECT * FROM wp_terms JOIN wp_term_taxonomy
ON wp_term_taxonomy.term_id = wp_terms.term_id 
WHERE wp_term_taxonomy.parent = ".$parent_cat_ID." 
AND wp_term_taxonomy.taxonomy = 'product_cat'");

Я сделал это, чтобы решить проблему

  <?php 
    $terms = get_the_terms( $post->cat_ID , 'product_cat' );
    foreach ($terms as $term) { 
        $term_id = $term->term_id;
        $term_link = get_term_link( $term, $taxonomy );
        $term_name = $term->name;
        echo '<a class="cat-box" href="' . $term_link . '"><span class="cat-name">' . $term_name . '</span></a>';   
    }
    ?>

Ответ или решение

Чтобы получить все подпункты категории для страницы архива в WooCommerce на WordPress, исходя из вашего запроса, вам нужно использовать функционал WordPress для работы с категориями продуктов. Вот шаги, которые помогут вам достичь нужного результата.

1. Получите ID родительской категории

Когда вы находитесь на странице архива для подкатегории (например, для Category 2), вам нужно получить ID родительской категории (Product 1 Category). Для этого используйте встроенные функции WordPress:

// Получите текущую категорию
$current_category = get_queried_object();

// Убедитесь, что у категории есть родитель
if ($current_category->parent > 0) {
    $parent_cat_ID = $current_category->parent;
} else {
    // Если родительской категории нет, используйте ID текущей категории
    $parent_cat_ID = $current_category->term_id;
}

2. Получите подкатегории

Теперь, когда у вас есть ID родительской категории, вы можете получить все её подкатегории (например, Category 1, Category 2, и т.д.) с помощью функции get_categories:

$args = array(
    'hierarchical' => 1,
    'show_option_none' => '',
    'hide_empty' => 0,
    'parent' => $parent_cat_ID,
    'taxonomy' => 'product_cat'
);

$subcategories = get_categories($args);

// Проверьте, существуют ли подкатегории и выведите их в список
if (!empty($subcategories)) {
    echo '<ul class="wooc_sclist">';
    foreach ($subcategories as $subcategory) {
        $link = get_term_link($subcategory->slug, $subcategory->taxonomy);
        echo '<li><a href="' . esc_url($link) . '">' . esc_html($subcategory->name) . '</a></li>';
    }
    echo '</ul>';
} else {
    echo '<p>Подкатегорий нет</p>';
}

3. Объединение всего кода

Объедините весь вышеуказанный код в одном месте, например, в файле вашего шаблона для архива категорий archive-product.php или в любом другом подходящем месте:

<?php
// Получите текущую категорию
$current_category = get_queried_object();

// Получите ID родительской категории
if ($current_category->parent > 0) {
    $parent_cat_ID = $current_category->parent;
} else {
    $parent_cat_ID = $current_category->term_id;
}

// Получите подкатегории
$args = array(
    'hierarchical' => 1,
    'show_option_none' => '',
    'hide_empty' => 0,
    'parent' => $parent_cat_ID,
    'taxonomy' => 'product_cat'
);

$subcategories = get_categories($args);

// Вывод подкатегорий в список
if (!empty($subcategories)) {
    echo '<ul class="wooc_sclist">';
    foreach ($subcategories as $subcategory) {
        $link = get_term_link($subcategory->slug, $subcategory->taxonomy);
        echo '<li><a href="' . esc_url($link) . '">' . esc_html($subcategory->name) . '</a></li>';
    }
    echo '</ul>';
} else {
    echo '<p>Подкатегорий нет</p>';
}
?>

Заключение

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

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

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