Как получить категории продуктов WooCommerce в WordPress

ВОПРОС

Друзья, хелп! Нужна ваша помощь. Надеюсь, вы сможете найти для меня решение одной задачи. Я хочу извлечь категории продуктов из WooCommerce. Для этого я использую такую функцию:

function get_me_list_of($atts, $content = null)
{
$args = array( ‘post_type’ => ‘product’, ‘posts_per_page’ => 10, ‘product_cat’ => $atts[0]);
$loop = new WP_Query( $args );
echo ‘<h1 class=”upp”>Style ‘.$atts[0].'</h1>’;
echo “<ul class=’mylisting’>”;
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
echo ‘<li><a href=”‘.get_permalink().'”>’.get_the_post_thumbnail($loop->post->ID, ‘thumbnail’).'</a></li>’;
echo ‘<li><a href=”‘.get_permalink().'”>’.$loop->post->post_title.'</a></li>’;
echo ‘<li><a href=””>’.get_categories().'</a></li>’;
endwhile;
echo “</ul>”;
wp_reset_query();
}

Проблема заключается в том, что вместо того, что мне нужно, мой код отображает сами товары. Я попробовал самостоятельно разобраться и попробовал использовать это:

echo ‘<li><a href=””>’.get_categories().'</a></li>’;

И это возвращает данные в виде массива. Что мне нужно изменить, чтобы получить именно то, что необходимо?

ОТВЕТ

Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое.

Привет, дружище. Кажется, я знаю, чем можно помочь тебе. Вот код, который выведет именно категории товаров.

<?php
$taxonomy = ‘product_cat’;
$orderby = ‘name’;
$show_count = 0; // 1 for yes, 0 for no
$pad_counts = 0; // 1 for yes, 0 for no
$hierarchical = 1; // 1 for yes, 0 for no
$title = ”;
$empty = 0;

$args = array(
‘taxonomy’ => $taxonomy,
‘orderby’ => $orderby,
‘show_count’ => $show_count,
‘pad_counts’ => $pad_counts,
‘hierarchical’ => $hierarchical,
‘title_li’ => $title,
‘hide_empty’ => $empty
);
$all_categories = get_categories( $args );
foreach ($all_categories as $cat) {
if($cat->category_parent == 0) {
$category_id = $cat->term_id;
echo ‘<br /><a href=”‘. get_term_link($cat->slug, ‘product_cat’) .'”>’. $cat->name .'</a>’;

$args2 = array(
‘taxonomy’ => $taxonomy,
‘child_of’ => 0,
‘parent’ => $category_id,
‘orderby’ => $orderby,
‘show_count’ => $show_count,
‘pad_counts’ => $pad_counts,
‘hierarchical’ => $hierarchical,
‘title_li’ => $title,
‘hide_empty’ => $empty
);
$sub_cats = get_categories( $args2 );
if($sub_cats) {
foreach($sub_cats as $sub_category) {
echo $sub_category->name ;
}
}
}
}
?>

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