WooCommerce Product 使用自訂參數查詢

當要查詢 WooCommerce 商品的時候,我偏好使用 wc_get_products 來取得商品列表,跟直接使用 wp_query 比起來,前者提供的參數可以用更簡潔的寫法來依照商品的條件來查詢,像是售價、銷售量或是庫存量等等。

我的需求是要依照商品的販售期限進行查詢,我用 ACF 增加了一個商品下架日期欄位叫做 end_date,當超過這個期限時商品就會自動下架,因此我要篩選出 end_date 符合當天日期的商品來改變商品的販售狀態。

但與 wp_query 的用法不同,wc_get_products 並未提供自訂欄位的參數,需要透過勾點 woocommerce_product_data_store_cpt_get_products_query 來加入,在勾點中要先判斷查詢的參數是否有帶入,有的話再用 meta_query 加入查詢。

實作如下:首先先在 wc_get_products 的參數帶入 end_date,並給一個 yes 的值作為稍後查詢的判斷:

$args        = array(
	'type'     => 'variable',
	'return'   => 'ids',
	'end_date' => 'yes',
);
$product_ids = wc_get_products( $args );

然後在勾點 woocommerce_product_data_store_cpt_get_products_query 裡面進行 end_date 的檢查,有存在的話就加入 meta_query 來修改查詢結果,這樣就能正確篩選出符合條件的商品:

add_filter('woocommerce_product_data_store_cpt_get_products_query',function(){
	if ( 'yes' === $query_vars['end_date'] ) {
		$query['meta_query'][] = array(
			array(
				'key'     => 'end_date',
				'value'   => date( 'Y/m/d' ),
				'compare' => '=',
				'type'    => 'DATE',
			),
		);
	}
	return $query;
})

目錄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Picture of 賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!