/**
* Search by product SKU
*/
function wpninja_product_search_sku( $join, $query ) {
if ( ! $query->is_main_query() || is_admin() || ! is_search() || ! is_woocommerce() ) {
return $join;
}
global $wpdb;
$join .= " LEFT JOIN {$wpdb->postmeta} wpninja_post_meta ON {$wpdb->posts}.ID = wpninja_post_meta.post_id ";
return $join;
}
add_filter( 'posts_join', 'wpninja_product_search_sku', 10, 2 );
/**
* Modify the search query with posts_where.
*/
function wpninja_product_search_where( $where, $query ) {
if ( ! $query->is_main_query() || is_admin() || ! is_search() || ! is_woocommerce() ) {
return $where;
}
global $wpdb;
$where = preg_replace(
"/\(\s*{$wpdb->posts}.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"({$wpdb->posts}.post_title LIKE $1) OR (wpninja_post_meta.meta_key = '_sku' AND wpninja_post_meta.meta_value LIKE $1)", $where );
return $where;
}
add_filter( 'posts_where', 'wpninja_product_search_where', 10, 2 );