获取给定类别ID的产品列表

时间:2014-05-06 作者:Malloc

我找不到正确的方法来获取给定类别ID(不是类别名称)的所有产品的列表。

我用于获取类别列表的代码如下所示,运行良好:

$args = array(
           \'orderby\'    => $orderby,
           \'order\'      => $order,
           \'hide_empty\' => 0,
           \'include\'    => $ids,
           \'parent\'    => 0,
     ); 

$categories = get_terms( \'product_cat\', $args );
然而,现在对于给定的类别ID(比如47),我找不到获得其相关产品的方法。我尝试了以下方法:

$args = array( 
    \'posts_per_page\' => 5,
    \'offset\'=> 1,
    \'category\' => 47
 );

$products = get_posts( $args );
echo var_dump($products);
调试$products 数组总是返回0,这是错误的,因为我知道该类别下有一些ID为47的产品。有没有办法修复我的代码?

6 个回复
SO网友:benz001

我怀疑主要的问题是你应该使用WP_Query 对象而不是get_posts(). 默认情况下,后者仅返回post\\u类型为post 不是产品,

因此,给定ID为26的类别,以下代码将返回其产品(WooCommerce 3+):

    $args = array(
    \'post_type\'             => \'product\',
    \'post_status\'           => \'publish\',
    \'ignore_sticky_posts\'   => 1,
    \'posts_per_page\'        => \'12\',
    \'tax_query\'             => array(
        array(
            \'taxonomy\'      => \'product_cat\',
            \'field\' => \'term_id\', //This is optional, as it defaults to \'term_id\'
            \'terms\'         => 26,
            \'operator\'      => \'IN\' // Possible values are \'IN\', \'NOT IN\', \'AND\'.
        ),
        array(
            \'taxonomy\'      => \'product_visibility\',
            \'field\'         => \'slug\',
            \'terms\'         => \'exclude-from-catalog\', // Possibly \'exclude-from-search\' too
            \'operator\'      => \'NOT IN\'
        )
    )
);
$products = new WP_Query($args);
var_dump($products);
在WooCommerce的早期版本中,可见性存储为元字段,因此代码为:

    $args = array(
    \'post_type\'             => \'product\',
    \'post_status\'           => \'publish\',
    \'ignore_sticky_posts\'   => 1,
    \'posts_per_page\'        => \'12\',
    \'meta_query\'            => array(
        array(
            \'key\'           => \'_visibility\',
            \'value\'         => array(\'catalog\', \'visible\'),
            \'compare\'       => \'IN\'
        )
    ),
    \'tax_query\'             => array(
        array(
            \'taxonomy\'      => \'product_cat\',
            \'field\' => \'term_id\', //This is optional, as it defaults to \'term_id\'
            \'terms\'         => 26,
            \'operator\'      => \'IN\' // Possible values are \'IN\', \'NOT IN\', \'AND\'.
        )
    )
);
$products = new WP_Query($args);
var_dump($products);
在这里,我们只返回可见的产品,每页12个。

仔细检查一下http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters 要了解更多关于类别定位工作原理的详细信息,通常通过slug而不是ID来检索它更有用!

SO网友:Kaspi
$products = wc_get_products(array(
    \'category\' => array(\'your-category-slug\'),
));
SO网友:dalveer

按id或名称或slug更改类别(类别slug名称)

<?php

$args = array( \'post_type\' => \'product\', \'stock\' => 1, \'posts_per_page\' => 2,\'product_cat\' => \'category-slug-name\', \'orderby\' =>\'date\',\'order\' => \'ASC\' );
  $loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product; 
?>
Within loop we can fetch Product image, title, description, price etc. 

<?phpendwhile;wp_reset_query(); ?>

SO网友:Erenor Paz

有点晚了,但我想澄清一下,并提供一个更清晰的答案。用户@benz001给出了一个可能有效的答案,但说错了:get_posts 返回任何类型的帖子类型,默认为posts post类型,就像WP_Query. 这两者之间的真正区别得到了极好的解释HERE.

事实上,OP只是在$args 阵列:

他正在搜索的职位类型的定义:

    \'post_type\'             => \'product\',
以及对搜索查询的“分类部分”的修改:

    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'product_cat\',
            \'terms\' => 26,
            \'operator\' => \'IN\',
        )
    )
这样你的下一行

$products = new WP_Query($args);
var_dump($products);
将向您展示所需的产品:)

@benz001显示的所有其他附加参数当然有效,但OP没有要求,所以我决定在这个答案中保留它们。

SO网友:Rahul Shinde

通过使用get_posts wordpress功能

按类别获取所有WooCommerce产品ID

在下面的代码中,只需要添加类别名称及其工作。

$all_ids = get_posts( array(
  \'post_type\' => \'product\',
  \'numberposts\' => -1,
  \'post_status\' => \'publish\',
  \'fields\' => \'ids\',
  \'tax_query\' => array(
     array(
        \'taxonomy\' => \'product_cat\',
        \'field\' => \'slug\',
        \'terms\' => \'your_product_category\', /*category name*/
        \'operator\' => \'IN\',
        )
     ),
  ));
  foreach ( $all_ids as $id ) {
     echo $id;
  }

SO网友:Kevin van Boeckholtz

这在使用模板文件时有效taxonomy-product-cat.php

$products = wc_get_products([\'category_id\' => get_queried_object_id()]);

结束

相关推荐