wc_get_products 和 WC_Product_Query 查询类的所有参数及使用示例

wc_get_products 和 WC_Product_Query 是WooCommerce用来查询产品的标准方法,改方法不会随着WooCommerce未来版本中的数据库更改而变化,因此,我们可以放心的使用此方法来进行自定义查询,以实现各种WooCommerce功能

虽然我们可以可以使用 WP_Query 来实现WooCommerce产品的自定义插件,但是可能会无法兼容未来的WooCommerce版本,所以不推荐使用这种方法。

函数参数

通用参数

参数类型默认值描述可用值
statusstring产品状态‘draft’, ‘pending’, ‘private’, ‘publish’
typestring产品类型‘external’, ‘grouped’, ‘simple’, ‘variable’ 或自定义产品类型
includearray[]包含产品包含产品ID的整数数组
excludearray[]排除产品包含产品ID的整数数组
parentint父产品产品ID
parent_excludeint排除父产品产品ID
limitintposts_per_page值获取产品数量最多获取产品数量,-1为不限制
pageint1当前分页数获取产品的分页数,如果设置了offset, 该值不起作用
paginateboolfalse是否分页true 获取分页, false 不获取
offsetint0跳过的产品数量任意整数
orderstringDESC排序顺序DESC降序,ASC升序
orderbystringdate排序依据‘none’, ‘ID’, ‘name’, ‘type’, ‘rand’, ‘date’, ‘modified’
returnstringobjects返回数据类型ids或 objects

产品参数

参数类型默认值描述可用值
skustring产品SKU产品SKU的一部分或全部
tagarray[]产品标签标签别名数组
categoryarray[]产品分类分类别名数组
weightfloat重量重量值
lengthfloat长度长度值
widthfloat宽度宽度值
heightfloatposts_per_page值高度高度值
pricefloat价格价格值
regular_pricefloat常规价格常规价格值
sale_pricefloat销售价格销售价格值
total_salesint产品销售量产品销售量
vitualbool是否为虚拟产品true/false
downloadablebool是否为可下载产品true/false
featuredbool是否为置顶产品true/false
sold_individuallybool是否为单独销售的产品true/false
manage_stockbool是否为管理库存的产品true/false
reviews_allowedbool是否为允许评价的产品true/false
backordersstring是否为延期交货的产品‘yes’, ‘no’, or ‘notify’
visibilitystring产品可见性‘visible’, ‘catalog’, ‘search’, or ‘hidden’
stock_quantityint产品库存产品库存值
stock_statusstring库存状态‘outofstock’ 或 ‘instock’
tax_statusstring税收状态‘taxable’, ‘shipping’, or ‘none’
tax_classstring税收类型税收类型别名
shipping_classstring物流类型物流类型别名
download_limitint下载限制整数,-1为无限制
download_expiryint下载过期整数,-1为无限制
average_ratingfloat平均评分小于等于5的浮点数
review_countint评价数量整数

日期参数

参数类型默认值描述可用值
date_createdstring产品创建日期YYYY-MM-DD形式的日期和运算符
date_modifiedstring产品修改日期YYYY-MM-DD形式的日期和运算符
date_on_sale_fromstring促销开始日期YYYY-MM-DD形式的日期和运算符
date_on_sale_tostring促销结束日期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' ) );

相关链接

本站提供 WordPress主题定制开发服务

本站长期承接 WordPress主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有 8 年WordPress开发经验,如果你想 用WordPress开发网站, 请联系微信: iwillhappy1314,或邮箱: 4626395@gmail.com 咨询。

发表回复

您的电子邮箱地址不会被公开。

*