获取给定类别的产品列表

时间:2018-03-03 作者:Maayam

我想从WP\\u查询中获得给定类别的产品列表,但它无法正常工作。

我做到了:

$args = array( 
    \'post_type\' => \'product\',
    \'product_cat\' => 17,
);
$products = new WP_Query($args);
但这又回来了every 来自我的店铺的产品。。。我还尝试了“cat”、“category”和“category\\u name”属性,得到了相同的结果。

我已尝试使用tax\\u查询:

$args = array( 
    \'post_type\' => \'product\',
    \'tax_query\' => array(
        \'taxonomy\' => \'product_cat\',
        \'terms\'    => 17
    ),
);
$products = new WP_Query($args);
这也会回来every products我还尝试了“cat”、“category”和“category\\u name”,得到了相同的结果。

我已经设法使用以下代码从给定类别中获取常规帖子。

$args = array( 
    \'post_type\' => \'post\',
    \'cat\'       => 22
);
$posts = new WP_Query($args);
还有几件事:

我确信我有正确的类别id。税务查询也适用于这些帖子编辑:tax_query 返回所有产品,忽略我的product_cat 属性

几天来,我一直在寻找解决类似问题的方法,在stack和其他网站上尝试了所有可能的解决方案,但都没有成功。。。为什么它不适用于产品?

编辑:代码snipet withtax_query 错了,所以我改了。

编辑2:我尝试了一些新东西,下面是总结:

禁用所有自定义挂钩:相同的结果实例化了WC_Product 手动将实际产品的id作为参数。这表明category_ids 属性为空,即使产品在管理面板上有类别。。。类别分类页面也显示了正确的内容var_dump(get_the_terms($postID, \'category\')); 在一篇常规帖子中,它运行良好,编辑3:-禁用所有插件,但Woocommerce的结果相同…-当我这样做的时候var_dump(get_post_types());, 产品帖子类型不显示。很自然,当我这样做的时候var_dump(get_object_taxonomies(\'product\'));, 它返回一个空数组。

2 个回复
最合适的回答,由SO网友:Maayam 整理而成

最后,我的主要问题是,我正在将代码直接执行到函数中。php(用于测试目的)。代码在woocommerce初始化之前执行,然后无法正确获取产品。尽管如此,我无法让Wp\\u查询只返回一个给定类别的产品。它仍在返回我数据库中的所有产品,所以我找到了一种解决方法。

$category; //this is the var containing the wanted category slug
$productPosts = new WP_Query(array(
    \'post_type\' => \'product\'
));

//I could have used $productPosts->have_posts() here but I decided not to use it in my particular context
foreach ($productPosts->posts as $p) {
    $currentProduct = new WC_Product_Variable($p->ID);

    //I can only access category ids with WC_Product so I\'m building an array of category slugs instead
    foreach ($currentProduct->get_category_ids() as $catId) {
        if( $term = get_term_by( \'id\', $catId, \'product_cat\' ) ){
            array_push($categories, $term->name); //push it
        }
    }

    if(in_array($category, $categories)){ //if the current currentProduct has the asked category,
        //push it in $currentProduct into $products array
        array_push($products, $currentProduct);
    }
    else{//current product doesn\'t have asked category
    }
} //end foreach, we now have all products of asked category... in $products array
这很有效。。。但真的,感觉不对。我正在对要包含在最终数组中的每个产品进行多个数据库查询。。。woocommerce就是这样运作的吗?此外,我不确定我应该如何分页这些数据,但无论如何,这不是我关心的问题。。。

一定有更好的方法,但我现在找不到。。。

SO网友:RavikantDk

我知道,我来不及回答这个问题,但这对其他人有帮助。

$args = array(      
        \'post_type\' => \'product\',
        \'post_status\' => \'publish\',
        \'tax_query\' => array(
                        array(
                            \'taxonomy\' => \'product_cat\',
                            \'field\'    => \'term_id\',
                            \'terms\'    => array($cat_id1,$cat_id2),
                            ),
                        ),
            );

$query = new WP_Query($args);
它经过测试并已投入使用WC 3.9.1

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post