Как сгруппировать продукты woocommerce по категориям в WordPress - PullRequest
0 голосов
/ 02 июля 2018

У меня есть как минимум 4 родительские категории, и у каждой родительской категории есть подкатегория.

Категории в WordPress выглядят так:

  • Lidingö (родительская категория)

    • Direktåtkomst Förrådslänga (Подкатегория)
      • 7 квм (продукт)
      • 6 квм (продукт)
    • Entréplan (Подкатегория)
      • 1 кбм (продукт)
      • 1,5 кв (продукт)
  • Нака (родительская категория)

    • Образец (подкатегория)
      • aa (продукт)
      • bbb (продукт)

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

Это мой текущий код:

<?php

    $args = array(
        'post_type' => 'product',
        array(
            'taxonomy' => 'product_cat' 
        ),
        'posts_per_page' => 6,
    );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {

        while ( $loop->have_posts() ) : $loop->the_post();

            echo woocommerce_template_single_title();

        endwhile;
    } else {
        echo __( 'No products found' );
    }
    wp_reset_postdata();

?>

Я думаю, что приведенный выше код неверен, потому что одни и те же продукты отображаются для каждой нумерации страниц.

enter image description here

Есть ли у вас какие-либо идеи относительно правильного запроса для группировки всех продуктов woocommerce по категориям? Спасибо

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Сначала вам нужно перезаписать этот шаблон woocommerce для текущей темы, так как вы должны использовать пользовательский цикл для получения товаров по категориям.

Просто скопируйте этот шаблон woocommerce в свой current_theme-> создать имя папки (Woocommerce) -> Вставить шаблон в эту папку.

Используйте ниже код:

$parent_terms= get_terms( array( 'taxonomy' => 'product_cat', 'parent' => 0 ) );
if($parent_terms= ) 
{
    foreach( $parent_terms  as $parent_term  ) 
    {
        $child_terms = get_terms( array( 'taxonomy' => 'product_cat', 'parent' => $parent_term->term_id  ) );
        if($child_terms) 
        {
            foreach( $child_terms as $child_term ) 
            {
                $product_args=
                    array(
                        'posts_per_page' => 50, 
                        'post_type' => 'my_custom_type',
                        'posts_per_page' => 6,
                        'cat' => $child_term->term_id 
                    );
                $product_query = new WP_Query( $product_args );
                while($product_query->have_posts()) : $product_query->the_post(); 
                {
                    Here you will get product detail so you can display product details as you wanted
                }
            }
        }   
    }
}
0 голосов
/ 02 июля 2018

Ваш запрос запрашивает все продукты, относящиеся к таксономии категории продуктов, то есть все они.

Вам необходимо сузить поиск, добавив категорию, которую вы хотите найти, к аргументам. Например, если вы хотите искать через категорию слаг, вы должны использовать:

$args = array(
    'post_type' => 'product',
    array(
        'taxonomy' => 'product_cat',
        'field' => 'slug',
        'terms' => 'category-slug1'
    ),
    'posts_per_page' => 6,
);

Чтобы просмотреть все категории на одной странице, вам понадобится что-то вроде этого:

$my_categories = get_terms( 'TERM_NAME_HERE' );
$my_categories_count = count( $my_categories );

if ( $my_categories_count > 0 && is_array( $my_categories ) ) {
    echo '<div class="wrap">';
    foreach ( $my_categories as $single_cat ) { ?>
        <h2><?php echo $single_cat->name; ?></h2>

        <?php
            $cat_posts_args = array(
                'post_type' => 'product',
                'order' => 'ASC',
                'orderby' => 'date',
                'post_status' => 'publish',
                'posts_per_page' => -1,
                'tax_query' => array(
                    array(
                        'taxonomy' => 'product_cat',
                        'field' => 'id',
                        'terms' => $single_cat->term_id,
                        'include_children' => false
                    )
                )
            );
            $cat_posts = new WP_Query( $cat_posts_args );
            if ( $cat_posts->have_posts() ) :
                echo '<p>';
                while ( $cat_posts->have_posts() ) : $cat_posts->the_post(); ?>

                    <a href="<?php the_permalink(); ?>"><span><?php the_title(); ?></span>: <?php echo get_the_excerpt(); ?></a><br>

                <?php endwhile;
                echo '</p>';
            else :
                if ( !$parent ) echo '<p>No products found.</p>';
            endif;
            wp_reset_postdata();
        } // end foreach
    echo '</div>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...