WordPress / WooCommerce:无法在WP_Query中指定产品类别

时间:2013-09-17 23:20:26

标签: php wordpress woocommerce

我正在尝试设置一个自定义循环,循环遍历分配到产品类别的产品,但它似乎不起作用。

我的类别设置:

Factory Direct - FD1 - FD2 - FD3

我希望我的循环显示属于Factory Direct的任何ID为84的儿童类别的产品。

我尝试在模板中对此进行编码:

<ul class="products factoryloop">
    <?php
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 12,
            'cat' => 84
            );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
                woocommerce_get_template_part( 'content', 'product' );
            endwhile;
        } else {
            echo __( 'No products found' );
        }
        wp_reset_postdata();
    ?>
</ul><!--/.products-->

我尝试将ID从84更改为特定类别(例如ID为24的FD1示例),但它仍然无效。

有任何想法/建议吗?

如果我在WP_Query中删除了cat参数,它会遍历产品,但是我无法指定我的循环。

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要先获取该类别的所有孩子,并将其包含在查询的cat参数中。

<ul class="products factoryloop">
    <?php
        $parentCat = 84;
        $children = get_categories(array('child_of'=>$parentCat));

        $childs = array($parentCat);
        foreach($children as $child){
            $childs[] = $child->cat_ID;
        }
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 12,
            'cat' => implode(',', $childs);
            );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
                woocommerce_get_template_part( 'content', 'product' );
            endwhile;
        } else {
            echo __( 'No products found' );
        }
        wp_reset_postdata();
    ?>
</ul><!--/.products-->

答案 1 :(得分:1)

这就是我使用 query_posts 的方式,你应该用 WP_Query 做同样的事情。

function getCategoryByParent ($id) {
    $args=array(
      'orderby' => 'name',
      'parent' => $id,
      'hide_empty' => false,
      'taxonomy' => 'product_cat',
      'order' => 'ASC',
      );
    $categories=get_categories($args);
    return $categories;
}
$cats = getCategoryByParent(84);
query_posts( array( 'paged' => $paged, 'posts_per_page' => 9, 'post_type' => 'product', 'post_status' => 'publish' ,  'taxonomy' => 'product_cat', 'tax_query' => array( 
            array(
              'taxonomy' => 'product_cat',
              'field' => 'id',
              'terms' => $cats
            ))));

希望你觉得它有用,Asaf。