Woocommerce продукт фильтрации wp-запросов - PullRequest
1 голос
/ 05 февраля 2020

Клиент хочет, чтобы только переменные продукты отображались как отдельные продукты на страницах категорий, и для этого нам нужен фильтр, я создал wp-запрос, чтобы получить эти продукты на страницах категорий

Пример пользовательского запроса для страницы категории:

<?php //showing products by category
                    $cat_name = 'sommerbettdecke'; // Product category name
                    $args =  array(
                        'post_type'       => 'product_variation',
                        'post_status'     => 'publish',
                            'order'                     => 'ASC',
                        'posts_per_page'  => -1,
                        'post_parent__in' => get_variation_parent_ids_from_term( $cat_name, 'product_cat', 'name' ), // Variations
                        'tax_query'      => array( array(
                            'taxonomy'        => 'pa_jahreszeit',
                            'field'           => 'slug',
                            'terms'           => 'sommer',
                            'operator'        => 'IN',
                        ) )
                    );
                    $wc_query = new WP_Query($args);?>

                    <p class="product-counter">Products on page <strong><?php echo $wc_query->post_count?></strong></p>

                    <ul class="products">
                    <!-- count all products on page -->
                    <?php if ($wc_query->have_posts()) :
                      while ($wc_query->have_posts()) :

                      $wc_query->the_post(); ?>

                      <!-- get attributes -->
                      <?php global $product; ?>
                      <?php $pa_fullung = array_shift( wc_get_product_terms( $product->id, 'pa_fullung', array( 'fields' => 'names' ) ) ); ?>
                      <?php $pa_grose = array_shift( wc_get_product_terms( $product->id, 'pa_grose', array( 'fields' => 'names' ) ) ); ?>

                      <!-- get product image -->
                      <?php $attachment_ids[0] = get_post_thumbnail_id( $product->id ); ?>
                      <?php $attachment = wp_get_attachment_image_src($attachment_ids[0], 'full' ); ?>

                      <!-- product display start here -->
                      <li class="product">
                        <a href="<?php the_permalink(); ?>">

                          <?php if ( has_post_thumbnail( $product->id ) ) { ?>
                              <img src="<?php echo $attachment[0] ; ?>" class="card-image"  />
                          <?php } ?>

                          <div class="produt-cat-loop">
                            <h2><?php the_title(); ?></h2>
                            <table>
                                <tbody><tr>
                                  <td>Füllung:</td>
                                  <td><?php echo $pa_fullung ?></td>
                                </tr>
                                <tr>
                                  <td>Füllgewicht:</td>
                                  <td><?php echo $pa_grose ?></td>
                                </tr>
                                <tr>
                                  <td>Hülle:</td>
                                  <td>Definisati atribut</td>
                                </tr>
                              </tbody>
                            </table>
                          </div>

                          <button class="btn-orange">Zum Produkt</button>
                        </a>
                      </li>
                      <!-- product display ends here -->
                    <?php endwhile; ?>
                    <?php wp_reset_postdata(); ?>
                    <?php else:  ?>
                      <!-- no products message -->
                      <p><?php _e( 'No Products' ); ?></p>
                    <?php endif; ?>
                    </ul>

Мне пришлось перечислить их по категориям и по атрибуту, чтобы получить его в правильном направлении. Теперь мне нужно получить фильтр боковой панели для этих продуктов, по умолчанию фильтр продуктов woocommerce не работает с пользовательскими запросами. Есть ли какой-нибудь плагин, который мог бы работать с пользовательским запросом, или есть ли способ получить переменные продукты как отдельные продукты и получить продукты на страницах категорий по категориям и атрибутам по умолчанию woocommerce l oop?

  • при перечислении товаров на странице категории я должен перечислять их не только по слагу категории, но и по значению атрибута (pa_jahreszeit), в этом примере запроса этот атрибут равен 'pa_jahreszeit', а его значение равно 'sommer' - не уверен, что это можно сделать по умолчанию. woocommerce l oop из archive-product. php

Обновление: -в боковой панели мне нужно отфильтровать товары по атрибутам и цене

Заранее спасибо, извините за орфографические ошибки

Обновление vol.2: Вот код из функций. php - использование pre_get_posts

add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $product ) {
  $product->set('post_type', 'product_variation');
  if (is_category( '2312' ) ) {
    $taxquery = array(
        array(
          'taxonomy'        => 'pa_jahreszeit',
          'field'           => 'slug',
          'terms'           => 'sommer',
          'operator'        => 'IN'
        )
    );
    $product->set( 'tax_query', $taxquery );
  }
}

Когда я помещаю налоговый запрос за пределы if (is_category( '2312' ) ) {, он работает нормально, но пока налоговый запрос находится внутри этого условия, он не работает, он показывает все переменные продукты: /

...