制作自定义的WooCommerce循环



我正在使用已设计为WordPress的主题,现在我想显示WooCommerce产品(这是我迷信的自定义帖子类型)。

这是显示循环的当前查询:

<?php 
                $args = array(
                    //'posts_per_page' => '2',
                    'paged' => get_query_var('paged')
                );
                $homepage_query = new WP_Query($args);
            ?>
            <?php //query_posts('posts_per_page=4&paged='.get_query_var('paged')); ?>
            <?php if ( have_posts() ) : ?>  
                <?php while ( $homepage_query->have_posts() ) : $homepage_query->the_post(); ?>
                    <?php if($style == 'blog_style') { ?>
                    <div id="blog-style" class="post-box">
                        <?php get_template_part('content', 'blog'); ?>
                    </div>
                    <?php } else { ?>
                    <div class="post-box grid_4 <?php aero_post_box_class(); ?>">
                        <?php get_template_part('content', ''); ?>
                    </div>
                    <?php } ?>
                <?php endwhile; ?>

有没有办法将选项添加到$args中,因此循环显示WooCommerce产品?我还使用此循环的分页,这是该项目所需的,因此,这就是为什么使用此循环很重要的原因。

您应该能够通过循环访问产品,将post_type arg设置为 product

<?php
// Setup your custom query
$args = array( 'post_type' => 'product', ... );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
    <a href="<?php echo get_permalink( $loop->post->ID ) ?>">
        <?php the_title(); ?>
    </a>
<?php endwhile; wp_reset_query(); // Remember to reset ?>

这是重新创建和自定义WooCommerce产品循环的正确方法:

  if(!function_exists('wc_get_products')) {
    return;
  }
  $paged                   = (get_query_var('paged')) ? absint(get_query_var('paged')) : 1; // if your custom loop is on a static front page then check for the query var 'page' instead of 'paged', see https://developer.wordpress.org/reference/classes/wp_query/#pagination-parameters
  $ordering                = WC()->query->get_catalog_ordering_args();
  $ordering['orderby']     = array_shift(explode(' ', $ordering['orderby']));
  $ordering['orderby']     = stristr($ordering['orderby'], 'price') ? 'meta_value_num' : $ordering['orderby'];
  $products_per_page       = apply_filters('loop_shop_per_page', wc_get_default_products_per_row() * wc_get_default_product_rows_per_page());
  $products_ids            = wc_get_products(array(
    'status'               => 'publish',
    'limit'                => $products_per_page,
    'page'                 => $paged,
    'paginate'             => true,
    'return'               => 'ids',
    'orderby'              => $ordering['orderby'],
    'order'                => $ordering['order'],
  ));
  wc_set_loop_prop('current_page', $paged);
  wc_set_loop_prop('is_paginated', wc_string_to_bool(true));
  wc_set_loop_prop('page_template', get_page_template_slug());
  wc_set_loop_prop('per_page', $products_per_page);
  wc_set_loop_prop('total', $products_ids->total);
  wc_set_loop_prop('total_pages', $products_ids->max_num_pages);
  if($products_ids) {
    do_action('woocommerce_before_shop_loop');
    woocommerce_product_loop_start();
      foreach($products_ids->products as $featured_product) {
        $post_object = get_post($featured_product);
        setup_postdata($GLOBALS['post'] =& $post_object);
        wc_get_template_part('content', 'product');
      }
      wp_reset_postdata();
    woocommerce_product_loop_end();
    do_action('woocommerce_after_shop_loop');
  } else {
    do_action('woocommerce_no_products_found');
  }

使用上面的代码,您将自定义wc_get_products()参数以获取所需产品的ID(如果您有特定的条件)。该代码到位后,本机WooCommerce循环的所有功能将为您提供 - 薪水,订购等。此方法优于WP_Queryget_posts(),因为这两种方法可能会破坏。

我已经在这里写了一篇更详细的博客文章:https://cfxdesign.com/create-a-custom-woocommerce-product-loop-loop-the-right-way/par-the/p>

您也可以使用Thi Code

获得类别
       $terms = get_terms('product_cat');
       foreach ($terms as $term) {
         $term_link =  get_term_link( $term, 'product_cat' );
         echo '<li><a href="' . $term_link . '">' . $term->name . '</a></li>';
       }

如果仅想要父类别,则

wp_list_categories('taxonomy=product_cat&orderby=order&title_li=&depth=1'); 

最新更新