2015-05-30 4 views
3

У меня есть запрос wp_query для отправки всех продуктов, и вам необходимо отсортировать это по двум полям: по категориям & по menu_order. Различные! Мне нужно сортировать по «menu_order» в каждой категории.Как я могу сортировать woocommerce все товары по категориям

В простом запросе:

$args = array(
     'orderby' =. 'product_cat menu_order' 
     'posts_per_page' => -1, 
     'post_type' => 'product', 
     ); 

     $loop = new WP_Query($args); 

В глобальных $ продукта, существует поля "menu_order", но не существует поле "product_cat".

Могу ли я сделать это с помощью wp_query? Или, может быть, существует другой способ сделать это?

ответ

-1

При попытке поиска и поиска я нашел решение для использования двух запросов для достижения этой цели, приведенный ниже пример может помочь вам достичь своей цели.

<?php

$catargs = array(

'orderby'     => 'name', 

'order'     => 'ASC', 

);

$categories = get_categories($catargs);

foreach ($categories as $category) {?>

<h3><?php echo $category->name; // Category title ?></h3> <?php

// WP_Query arguments 
$args = array (

    'post_type'    => 'resources', 

    'cat'     => $category->cat_ID, 

    'posts_per_page'   => '-1', 

    'order'     => 'ASC', 

'orderby'    => 'title', 

); 

// The Query 
$query = new WP_Query($args); 

// The Loop

if ($query->have_posts()) { 
    while ($query->have_posts()) { 
     $query->the_post(); 
     ?> 
     <h5><?php the_title(); // Post title ?></h5> 
     <?php 
     // You can all phone/ email here 
    } 
} else { 
    // no posts found 
} 

// Restore original Post Data 
wp_reset_postdata(); 

} ?>

Позвольте мне знать, если метод работает для вас.

1

Я был основан правильный способ сделать это, код гофрированный, этот пример для

/* Products Loop */ 
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
     $args = array(
      'posts_per_page' => $prod_per_page, 
      'paged' => $paged, 
      'post_type' => 'product', 
      'product_cat' => $product_cat, 
      'tax_query' => array(
       'relation' => 'AND', 
       array(
        'taxonomy' => 'product_cat', 
        'field' => 'term_id', 
        'terms' => $subcats_ar, 
        'operator' => 'NOT IN' 
       ), 
      ), 
      'orderby' => array('menu_order' => 'ASC', 'title' => 'ASC') 
     ); 
     $loop = new WP_Query($args); 

Более простым способом, без разбивки на страницы и исключить подкатегорий:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
     $args = array(
      'posts_per_page' => -1, 
      'post_type' => 'product', 
      'product_cat' => $product_cat, 
      'tax_query' => array(
       'relation' => 'AND', 
       array(
        'taxonomy' => 'product_cat', 
        'field' => 'term_id' 
       ), 
      ), 
      'orderby' => array('menu_order' => 'ASC', 'title' => 'ASC') 
     ); 
     $loop = new WP_Query($args); 

Волшебная линия для этого:

'orderby' => array('menu_order' => 'ASC', 'title' => 'ASC')