Zoeken op EAN code.

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

Plaats de onderstaande code in het 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?

  1. De code haakt in op de zoekquery van WooCommerce.
    Zodra een bezoeker zoekt op de website, controleert WordPress of het om een productzoekopdracht gaat.

  2. Er wordt een JOIN toegevoegd aan de databasequery.
    Hiermee krijgt de zoekopdracht toegang tot de tabel waarin de productmeta (zoals EAN’s) wordt opgeslagen.

  3. De WHERE-clausule wordt uigebreid.
    De query zoekt nu niet alleen in titels en beschrijvingen, maar ook in het veld _global_unique_id.

  4. DISTINCT voorkomt 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!