WordPress a Woocommerce nativně neumí vyhledávat podle SKU. Řešením je použití nějakého pluginu nebo přidání jednoduché funkce do functions.php

function wc_get_products_ids_and_skus( $sku_excerpt ) {
	global $wpdb;
	return $wpdb->get_results( $wpdb->prepare( "
					SELECT p.ID as id, pm.meta_value as sku
					FROM {$wpdb->prefix}posts p
					INNER JOIN {$wpdb->prefix}postmeta pm
						ON p.ID = pm.post_id
					WHERE ( p.post_type = 'product' OR p.post_type = 'product_variation' )
					AND p.post_status = 'publish'
					AND pm.meta_key = '_sku'
					AND pm.meta_value LIKE '%s'
					AND (( SELECT COUNT(*)
						FROM {$wpdb->prefix}term_relationships tr
					        WHERE object_id = p.ID AND ( tr.term_taxonomy_id = 6 OR tr.term_taxonomy_id = 7 )
					) = 0)
	", '%'.$sku_excerpt.'%' ) );
}

function search_by_sku( $search, $query_vars ) {
    global $wpdb;
    if(isset($query_vars->query['s']) && !empty($query_vars->query['s'])){
		$results = wc_get_products_ids_and_skus( $query_vars->query['s'] );
		$products_ids = array();
		foreach( $results as $result ) {
			$parent = wp_get_post_parent_id( $result->id );
			if ( isset($parent) && $parent > 0 ) {
				$products_ids[]	= $parent;
			}
			else {
				$products_ids[] = $result->id;	
			}
		}
		if ( sizeof( $products_ids ) > 0) {
			$search = str_replace( 'AND (((', "AND ((({$wpdb->posts}.ID IN (" . implode( ',', $products_ids ) . ")) OR (", $search);
		}
		// var_dump( $search );
	}
    return $search;
}
add_filter( 'posts_search', 'search_by_sku', 999, 2 );

Nejprve se funkcí ‚wc_get_products_ids_and_skus‘ z databáze vyberou všechny produkty, jejichž SKU obsahuje hledaný řetězec. Rovněž se prohledají i všechny varianty. Funkce vrátí pole s ID všech nalezených produktů. Pokud jde o variantu, funkce vrátí ID rodičovského produktu.

Funkce ‚search_by_sku‘ pak provede vlastní úpravu vyhledávacího dotazu. Injektáží do dotazu vloží příslušnou podmínku.

Pozn: původní funkci ‚wc_get_products_ids_and_skus‘ jsem nalezl zde. Nicméně byla vadná. Za prvé neuměla prohledávat i varianty produktů. A za druhé, mnohem vážnější problém byl ten, že vracela i produkty nastavené jako skryté, které se nemají zobrazovat ve výsledcích vyhledávání. Tím docházelo ve výsledcích vyhledávání ke zmatečnému stránkování, když na různých stránkách byly různé počty produktů (někde i žádný).