WooCommerce管理画面 Productsをカスタムフィールドで検索可にする

- WooCommerce -
2023.08.26
woocommerce/ウーコマース

WooCommerceの管理画面で商品(Products)を検索するとき、商品に独自に紐づけたカスタムフィールドで検索したいとき。

たとえば、management_idというカスタムフィールドキーにMGT_AA01という値を登録した商品を検索しようとしたとき、デフォルトだと検索に引っかかりません。

woocommerce管理画面 productsをカスタムフィールドで検索

これを、このように↓検索できるようにします。

woocommerce管理画面 productsをカスタムフィールドで検索

なお、本カスタマイズは管理画面のproductsページでのみ検索できるようにする方法で、お客さんが見るフロント画面での検索には影響しません。

WooCommerce管理画面 Productsをカスタムフィールドで検索可にするカスタマイズ

  1. 以下8行目をご自分の環境に合わせ修正
  2. functions.phpに貼り付け
functions.php// 管理画面 products カスタムフィールドで検索
function m_request_query( $query_vars ) {
	global $typenow;
	global $wpdb;
	global $pagenow;
	if ( 'product' === $typenow && isset( $_GET['s'] ) && 'edit.php' === $pagenow ) {
		$search_term = esc_sql( sanitize_text_field( $_GET['s'] ) );
		$meta_key = 'management_id'; // ★ 要修正
		$post_types = array( 'product', 'product_variation' );
		$search_results = $wpdb->get_results(
			$wpdb->prepare(
				"SELECT DISTINCT posts.ID as product_id, posts.post_parent as parent_id FROM {$wpdb->posts} posts LEFT JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id WHERE postmeta.meta_key = '{$meta_key}' AND postmeta.meta_value LIKE %s AND posts.post_type IN ('" . implode( "','", $post_types ) . "') ORDER BY posts.post_parent ASC, posts.post_title ASC",
				'%' . $wpdb->esc_like( $search_term ) . '%'
			)
		);
		$product_ids = wp_parse_id_list( array_merge( wp_list_pluck( $search_results, 'product_id' ), wp_list_pluck( $search_results, 'parent_id' ) ) );
		$query_vars['post__in'] = array_merge( $product_ids, $query_vars['post__in'] );
	}
	return $query_vars;
}
add_filter( 'request', 'm_request_query', 20 );

これで検索に引っかかるようになっていれば完了です。

上記コードは以下サイトを参考にしています。

参考mircian.com:Extending WooCommerce admin product search to use custom fields

↑TOP