In WooCommerce, there are two kinds of search: the customer one (frontend) and the admin one (backend). We’ve already covered how to let customers search into custom field values on top of the default product title and description, so this time we’ll talk about the backend search.
Let’s say, as a WooCommerce store admin, that you’ve added a product custom field (e.g. “gtin“), and you want to make sure the backend search also returns products where “gtin” is equal to the search term. The snippet below will help you do that. Enjoy!
PHP Snippet: Allow Admin to Search Products By Custom Field @ WordPress Dashboard
/**
* @snippet Search by Custom Field @ WP Dashboard
* @how-to Get CustomizeWoo.com FREE
* @author Rodolfo Melogli
* @compatible WooCommerce 7
* @community https://businessbloomer.com/club/
*/
add_filter( 'posts_where', 'bbloomer_search_products_by_custom_field_in_admin', 9999, 2 );
function bbloomer_search_products_by_custom_field_in_admin( $where, $wp_query ) {
global $wpdb, $pagenow;
$post_type = 'product';
$custom_fields = array(
"gtin",
"ean",
);
if ( is_admin() && 'edit.php' === $pagenow && $wp_query->query['post_type'] === $post_type && isset( $_GET['s'] ) ) {
$get_post_ids = array();
foreach ( $custom_fields as $custom_field_name ) {
$args = array(
'posts_per_page' => -1,
'post_type' => $post_type,
'meta_query' => array(
array(
'key' => $custom_field_name,
'value' => wc_clean( wp_unslash( $_GET['s'] ) ),
'compare' => 'LIKE'
)
),
'fields' => 'ids',
);
$posts = get_posts( $args );
if ( ! empty( $posts ) ) {
foreach ( $posts as $post_id ) {
$get_post_ids[] = $post_id;
}
}
}
$search_ids = array_filter( array_unique( array_map( 'absint', $get_post_ids ) ) );
if ( count( $search_ids ) > 0 ) {
$where = str_replace( "wp_posts.ID IN (0)", "wp_posts.ID IN (" . implode( ',', $search_ids ) . ")", $where );
}
}
return $where;
}
I had to replace
to
in order to make it work for some reason.
Noted, thank you
Is it possible to make for publicy in a search bar to search a product by custom fields?
Would this slightly help maybe? https://www.businessbloomer.com/woocommerce-search-products-by-sku/
I have a gtin_code custom field created like this :
I’ve changed the array gtin to gtin_code but doen’t look like it work.
Do I have to launch an re-index or something.
Uhm. Can you try with “_gtin_code” out of curiosity?
Hi Rodolfo
I’ve placed the “PHP Snippet: Allow Admin to Search Products By Custom Field @ WordPress Dashboardis PHP” code into a new Code snippet but the results aren’t the right one (see screenshot)
Can you help me please? Grazie in anticipo
Eric
Where can I send you a screen shot?
Weird. You can upload your screenshot somewhere online and send me the link. Let me know
Hi Rodolfo
Sorry for the late reply. Here the link
https://capture.dropbox.com/OVGMhDdOTnAmvW9c
I create a new snippet and I paste the code inside
I try it but it didn’t get me the right results
Quiet al my fields are personalized
Eric
And your custom field keys are definitely “gtin” and “ean”?
No, I’ve type for example the name of a winemaker like RΓ©gis Descotes
Thank you. In the snippet, you need to make sure you’re using the right custom field keys. If the winemaker field has the key “winemaker”, then you need to use this inside the snippet, otherwise it will look for “gtin” or “ean” custom fields, which you probably don’t use. Makes sense?
Does this work with HPOS?
Don’t see why not