wc_get_products 和 WC_Product_Query 是WooCommerce用来查询产品的标准方法,改方法不会随着WooCommerce未来版本中的数据库更改而变化,因此,我们可以放心的使用此方法来进行自定义查询,以实现各种WooCommerce功能
虽然我们可以可以使用 WP_Query 来实现WooCommerce产品的自定义插件,但是可能会无法兼容未来的WooCommerce版本,所以不推荐使用这种方法。
函数参数
通用参数
参数 | 类型 | 默认值 | 描述 | 可用值 |
---|---|---|---|---|
status | string | – | 产品状态 | ‘draft’, ‘pending’, ‘private’, ‘publish’ |
type | string | – | 产品类型 | ‘external’, ‘grouped’, ‘simple’, ‘variable’ 或自定义产品类型 |
include | array | [] | 包含产品 | 包含产品ID的整数数组 |
exclude | array | [] | 排除产品 | 包含产品ID的整数数组 |
parent | int | – | 父产品 | 产品ID |
parent_exclude | int | – | 排除父产品 | 产品ID |
limit | int | posts_per_page值 | 获取产品数量 | 最多获取产品数量,-1为不限制 |
page | int | 1 | 当前分页数 | 获取产品的分页数,如果设置了offset, 该值不起作用 |
paginate | bool | false | 是否分页 | true 获取分页, false 不获取 |
offset | int | 0 | 跳过的产品数量 | 任意整数 |
order | string | DESC | 排序顺序 | DESC降序,ASC升序 |
orderby | string | date | 排序依据 | ‘none’, ‘ID’, ‘name’, ‘type’, ‘rand’, ‘date’, ‘modified’ |
return | string | objects | 返回数据类型 | ids或 objects |
产品参数
参数 | 类型 | 默认值 | 描述 | 可用值 |
---|---|---|---|---|
sku | string | – | 产品SKU | 产品SKU的一部分或全部 |
tag | array | [] | 产品标签 | 标签别名数组 |
category | array | [] | 产品分类 | 分类别名数组 |
weight | float | – | 重量 | 重量值 |
length | float | – | 长度 | 长度值 |
width | float | – | 宽度 | 宽度值 |
height | float | posts_per_page值 | 高度 | 高度值 |
price | float | – | 价格 | 价格值 |
regular_price | float | – | 常规价格 | 常规价格值 |
sale_price | float | – | 销售价格 | 销售价格值 |
total_sales | int | – | 产品销售量 | 产品销售量 |
vitual | bool | – | 是否为虚拟产品 | true/false |
downloadable | bool | – | 是否为可下载产品 | true/false |
featured | bool | – | 是否为置顶产品 | true/false |
sold_individually | bool | – | 是否为单独销售的产品 | true/false |
manage_stock | bool | – | 是否为管理库存的产品 | true/false |
reviews_allowed | bool | – | 是否为允许评价的产品 | true/false |
backorders | string | – | 是否为延期交货的产品 | ‘yes’, ‘no’, or ‘notify’ |
visibility | string | – | 产品可见性 | ‘visible’, ‘catalog’, ‘search’, or ‘hidden’ |
stock_quantity | int | – | 产品库存 | 产品库存值 |
stock_status | string | – | 库存状态 | ‘outofstock’ 或 ‘instock’ |
tax_status | string | – | 税收状态 | ‘taxable’, ‘shipping’, or ‘none’ |
tax_class | string | – | 税收类型 | 税收类型别名 |
shipping_class | string | – | 物流类型 | 物流类型别名 |
download_limit | int | – | 下载限制 | 整数,-1为无限制 |
download_expiry | int | – | 下载过期 | 整数,-1为无限制 |
average_rating | float | – | 平均评分 | 小于等于5的浮点数 |
review_count | int | – | 评价数量 | 整数 |
日期参数
参数 | 类型 | 默认值 | 描述 | 可用值 |
---|---|---|---|---|
date_created | string | – | 产品创建日期 | YYYY-MM-DD形式的日期和运算符 |
date_modified | string | – | 产品修改日期 | YYYY-MM-DD形式的日期和运算符 |
date_on_sale_from | string | – | 促销开始日期 | YYYY-MM-DD形式的日期和运算符 |
date_on_sale_to | string | – | 促销结束日期 | YYYY-MM-DD形式的日期和运算符 |
如果没有特别说明,日期参数的时区均为站点设置的时区。
YYYY-MM-DD
– 匹配某一天的产品>YYYY-MM-DD
– 匹配某一天后的产品>=YYYY-MM-DD
– 匹配某一天或之后的产品<YYYY-MM-DD
– 匹配某一天之前的产品<=YYYY-MM-DD
– 匹配某一天和之前的产品YYYY-MM-DD...YYYY-MM-DD
– 匹配两个日期或之间的产品TIMESTAMP
– 匹配在 UTC 时区的那一秒内的产品。>TIMESTAMP
– 匹配在 UTC 时区的一秒后的产品。>=TIMESTAMP
– 匹配在 UTC 时区的一秒内或之后的产品。<TIMESTAMP
– 匹配在 UTC 时区的那一秒之前的产品。<=TIMESTAMP
– 匹配在 UTC 时区的那一秒内或之前的产品。TIMESTAMP...TIMESTAMP
– 匹配在 UTC 时区的秒数内或秒数之间的产品。
使用示例
使用wc_get_products进行自定义查询。
$products = wc_get_products( array(
'downloadable' => true,
'date_created' => '2016-01-01...2016-12-31`,
) );
使用WP_Product_Query进行自定义查询。
// Get 10 most recent product IDs in date descending order.
$query = new WC_Product_Query( array(
'limit' => 10,
'orderby' => 'date',
'order' => 'DESC',
'return' => 'ids',
) );
$products = $query->get_products();
添加自定义参数支持
除了使用上面的参数,我们海可以在 wc_get_products 或 WC_Product_Query 中添加对自定义参数的支持。要实现此功能,您需要过滤生成的查询,示例代码如下。
/**
* 处理自定义“customvar”查询变量以获取具有“customvar”元数据的产品。
* @param array $query - WP_Query 参数
* @param array $query_vars - 来自 WC_Product_Query 的查询参数
* @return array modified $query 修改后的查询变量
*/
function handle_custom_query_var( $query, $query_vars ) {
if ( ! empty( $query_vars['customvar'] ) ) {
$query['meta_query'][] = array(
'key' => 'customvar',
'value' => esc_attr( $query_vars['customvar'] ),
);
}
return $query;
}
add_filter( 'woocommerce_product_data_store_cpt_get_products_query', 'handle_custom_query_var', 10, 2 );
之后,就可以把上面的customvar作为查询参数使用了。
$products = wc_get_products( array( 'customvar' => 'somevalue' ) );