In de standaardinstellingen van WooCommerce kun je producten alleen vinden via de titel, beschrijving of het artikelnummer (SKU). Maar wat als je producten verkoopt met een EAN-code (European Article Number) — bijvoorbeeld bij het koppelen aan externe productfeeds of kassasystemen?
Dan is het handig als klanten of medewerkers direct kunnen zoeken op de EAN en het juiste product vinden.
In deze blogpost laten we zien hoe je WooCommerce uitbreidt zodat de zoekfunctie ook kijkt naar het EAN-veld (_global_unique_id).
Waarom dit nodig is
WooCommerce slaat de EAN-code meestal op in een custom field (meta key) met de naam _global_unique_id.
Standaard doorzoekt WooCommerce deze meta-velden niet — waardoor een zoekopdracht op een EAN, zoals 7797706014181, geen resultaten geeft.
Met een kleine aanpassing in de code kun je dit eenvoudig oplossen.
De oplossing: een kleine code snippet
functions.php-bestand van je (child)theme of in je snippets plugin:
/**
* Uitbreiding: laat WooCommerce ook zoeken op EAN-code (_global_unique_id)
*/
add_action( 'pre_get_posts', function( $query ) {
if (
! is_admin()
&& $query->is_main_query()
&& $query->is_search()
&& ( empty( $query->get( 'post_type' ) ) || $query->get( 'post_type' ) === 'product' )
) {
add_filter( 'posts_join', 'pbs_search_ean_join' );
add_filter( 'posts_where', 'pbs_search_ean_where', 10, 2 );
add_filter( 'posts_distinct', 'pbs_search_ean_distinct' );
}
});
function pbs_search_ean_join( $join ) {
global $wpdb;
if ( strpos( $join, $wpdb->postmeta ) === false ) {
$join .= " LEFT JOIN {$wpdb->postmeta} AS eanmeta ON ({$wpdb->posts}.ID = eanmeta.post_id) ";
}
return $join;
}
function pbs_search_ean_where( $where, $query ) {
global $wpdb;
$search_term = $query->get( 's' );
if ( empty( $search_term ) ) {
return $where;
}
$ean_like = '%' . esc_sql( $wpdb->esc_like( $search_term ) ) . '%';
$where .= $wpdb->prepare(
" OR (eanmeta.meta_key = '_global_unique_id' AND eanmeta.meta_value LIKE %s)",
$ean_like
);
return $where;
}
function pbs_search_ean_distinct( $distinct ) {
return 'DISTINCT';
}
Hoe werkt het?
- De code haakt in op de zoekquery van WooCommerce.
Zodra een bezoeker zoekt op de website, controleert WordPress of het om een productzoekopdracht gaat. - Er wordt een JOIN toegevoegd aan de databasequery.
Hiermee krijgt de zoekopdracht toegang tot de tabel waarin de productmeta (zoals EAN’s) wordt opgeslagen. - De WHERE-clausule wordt uigebreid.
De query zoekt nu niet alleen in titels en beschrijvingen, maar ook in het veld_global_unique_id. DISTINCTvoorkomt dubbele resultaten.
Resultaat
Voer nu een zoekopdracht uit met een EAN, bijvoorbeeld:
https://jouwdomein.nl/?s=7797706014181
De corresponderende productpagina wordt netjes gevonden — zelfs als de EAN nergens in de titel of beschrijving voorkomt.
Samenvatting
Met slechts een paar regels code kun je de zoekfunctionaliteit van WooCommerce flink verbeteren.
Klanten kunnen nu direct zoeken op EAN-codes, wat vooral handig is bij:
- Webshops met veel technische producten of onderdelen
- Import/export vanuit ERP-systemen
- Integratie met barcodescanners of voorraadbeheer
Een kleine aanpassing, maar een groot gebruiksgemak!