WooCommerce管理画面 Productsをカスタムフィールドで検索可にする
- WooCommerce -
2023.08.26
WooCommerceの管理画面で商品(Products)を検索するとき、商品に独自に紐づけたカスタムフィールドで検索したいとき。
たとえば、management_idというカスタムフィールドキーにMGT_AA01という値を登録した商品を検索しようとしたとき、デフォルトだと検索に引っかかりません。
これを、このように↓検索できるようにします。
なお、本カスタマイズは管理画面のproductsページでのみ検索できるようにする方法で、お客さんが見るフロント画面での検索には影響しません。
WooCommerce管理画面 Productsをカスタムフィールドで検索可にするカスタマイズ
- 以下8行目をご自分の環境に合わせ修正
- 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