Woocommerce получить продукты
Я использовал следующий код, чтобы получить список категорий товаров из WooCommerce на моем сайте WordPress:
<?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 = 0; // 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
);
?>
<?php $all_categories = get_categories( $args );
//print_r($all_categories);
foreach ($all_categories as $cat) {
//print_r($cat);
if($cat->category_parent == 0) {
$category_id = $cat->term_id;
?>
<?php
echo '<br /><a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>'; ?>
<?php
$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 ;
}
} ?>
<?php }
}
?>
Это прекрасно работает и возвращает список категорий товаров. Я пытался получить список продуктов для определенной категории.
Пример: получить все продукты с cat_id=34
.
Я знаю, что продукты хранятся в виде постов, и я пытался это сделать, но, похоже, не могу.
Как получить список товаров для определенной категории?
Ответы
Ответ 1
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
'product_cat' => 'hoodies'
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
echo '<br /><a href="'.get_permalink().'">' . woocommerce_get_product_thumbnail().' '.get_the_title().'</a>';
endwhile;
wp_reset_query();
?>
Здесь перечислены все миниатюры и имена продуктов вместе со ссылками на страницу продукта. измените название категории и posts_per_page согласно вашему требованию.
Ответ 2
<?php
$args = array( 'post_type' => 'product', 'category' => 34, 'posts_per_page' => -1 );
$products = get_posts( $args );
?>
Это должно захватить все продукты, которые вы хотите, возможно, у меня неправильный тип записи, хотя я не могу вспомнить, что woo-commerce использует для типа записей. Он вернет массив продуктов
Ответ 3
Не используйте WP_Query()
или get_posts()
. Из документа WooCommerce:
wc_get_products и WC_Product_Query предоставляют стандартный способ получения продуктов, который безопасен в использовании и не нарушается из-за изменений базы данных в будущих версиях WooCommerce. Создание пользовательских запросов WP_Queries или базы данных может привести к поломке кода в будущих версиях WooCommerce, поскольку данные перемещаются в сторону пользовательских таблиц для повышения производительности.
Вы можете получить нужные вам товары следующим образом:
$args = array(
'category' => array( 34 ),
'orderby' => 'name',
);
$products = wc_get_products( $args );
Документация WooCommerce
Ответ 4
Всегда используйте tax_query для получения сообщений/продуктов из определенной категории или любой другой таксономии. Вы также можете получить продукты, используя идентификатор/слаг определенной классификации...
$the_query = new WP_Query( array(
'post_type' => 'product',
'tax_query' => array(
array (
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'accessories',
)
),
) );
while ( $the_query->have_posts() ) :
$the_query->the_post();
the_title(); echo "<br>";
endwhile;
wp_reset_postdata();