Подтвердить что ты не робот

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.

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

Как получить список товаров для определенной категории?

4b9b3361

Ответ 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();