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 类似。就像那些一样,您传入定义搜索条件的参数数组。
这是我的解决方案:
$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。)
通过使用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)
已测试且工作正常。
| 归档时间: |
|
| 查看次数: |
45388 次 |
| 最近记录: |