Вопрос или проблема
Я использую 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, ' » ' );
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>';
}
?>
Заключение
Теперь вы можете отобразить список подкатегорий родительской категории на странице архива для подкатегории. Убедитесь, что ваш код находится в соответствующем шаблоне и корректно обрабатывает возможные ошибки. Вы можете адаптировать этот код для ваших конкретных нужд, включая стилизацию списка и вывод сообщений в случае отсутствия подкатегорий.