按类别 ID 获取产品

Mos*_*ari 6 wordpress woocommerce

我正在为 woocommerce 编写一个定价表插件。用户插入带有 woocommerce 产品类别 ID 的短代码,更新页面后,用户可以看到一个包含产品名称和价格列表的表格。
我怎样才能获得带有类别ID的产品列表?
在下面的代码中,$pid是用户在简码中输入的内容,'object_id'是 wp_posts 表中每个产品的 id。

<?php
    $products = $wpdb->get_results("SELECT object_id FROM {$wpdb->term_relationships}
                                      WHERE term_taxonomy_id = " . $pid);
    if(!empty($products))
    {
        foreach($products as $product)
        {
            //the code
        }
    }
?>  
Run Code Online (Sandbox Code Playgroud)

提前致谢。

cod*_*abs 11

 $args = array(
    'post_status' => 'publish',
    'tax_query' => array(
       array(
         'taxonomy' => 'product_cat',
         'field'    => 'term_id',
         'terms'     =>  '[ category id here ]', // When you have more term_id's seperate them by komma.
         'operator'  => 'IN'
         )
       )
    );
    $the_query = wp_query($args);
Run Code Online (Sandbox Code Playgroud)

未经测试但应该可以工作


小智 9

根据 Woocommerce 文档,不应使用WP_Query()get_posts() :

wc_get_products 和 WC_Product_Query 提供了一种检索产品的标准方法,该方法可以安全使用,并且不会因未来 WooCommerce 版本中的数据库更改而中断。随着数据移向自定义表以获得更好的性能,构建自定义 WP_Queries 或数据库查询可能会破坏 WooCommerce 未来版本中的代码。这是插件和主题开发人员检索多个产品的最佳实践方式。wc_get_products 和 WC_Product_Query 与 WordPress get_posts 和 WP_Query 类似。就像那些一样,您传入定义搜索条件的参数数组。

WooCommerce 文档

这是我的解决方案:

$product_term_ids = array(16,10,4,7);

$product_term_args = array(
    'taxonomy' => 'product_cat',
    'include' => $product_term_ids,
    'orderby'  => 'include'
);
$product_terms = get_terms($product_term_args);

$product_term_slugs = [];
foreach ($product_terms as $product_term) {
    $product_term_slugs[] = $product_term->slug;
}

$product_args = array(
    'post_status' => 'publish',
    'limit' => -1,
    'category' => $product_term_slugs,
    //more options according to wc_get_products() docs
);
$products = wc_get_products($product_args);

foreach ($products as $product) {
    echo $product->get_title();
}
Run Code Online (Sandbox Code Playgroud)

注意:类别参数需要一组 slugs,而不是 ID。

(经过测试并适用于 Wordpress 5.9.3 和 WooCommerce 6.4.1。)

图片来源:@Christian Lescuyer


Rah*_*nde 7

通过使用get_posts wordpress 函数

按类别获取所有 WooCommerce产品详细信息

$all_products = get_posts( array(
    'post_type' => 'product',
    'numberposts' => -1,
    'post_status' => 'publish',
    'tax_query' => array(
        array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => 'your_product_category', /*category name*/
            'operator' => 'IN',
            )
        ),
    ));
    echo var_dump($all_products);
Run Code Online (Sandbox Code Playgroud)

按类别获取所有 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;
   }
Run Code Online (Sandbox Code Playgroud)

已测试且工作正常。