Sku search

<?php

// Enable search for SKU for WooCommerce. see: https://wordpress.stackexchange.com/a/278320/88440
if (get_field('wc_search_sku', 'option') && class_exists('WooCommerce')) {

  add_filter('posts_join', function ($join) {
    global $wpdb;
    if (is_search()) {
      $join .= " LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id ";
    }
    return $join;
  });

  add_filter('posts_groupby', function ($groupby) {
    global $wpdb;
    if (is_search()) {
      $groupby = "$wpdb->posts.ID";
    }
    return $groupby;
  });

  add_filter('posts_search', function ($search_sql) {
    global $wpdb;

    $search_terms = get_query_var('search_terms');

    if (!empty($search_terms)) {
      foreach ($search_terms as $search_term) {
        $old_or = "OR ({$wpdb->posts}.post_content LIKE '{$wpdb->placeholder_escape()}{$search_term}{$wpdb->placeholder_escape()}')";
        $new_or = $old_or . " OR ({$wpdb->postmeta}.meta_value LIKE '{$wpdb->placeholder_escape()}{$search_term}{$wpdb->placeholder_escape()}' AND {$wpdb->postmeta}.meta_key IN ('_sku'))";
        $search_sql = str_replace($old_or, $new_or, $search_sql);
      }
    }

    $search_sql = str_replace(" ORDER BY ", " GROUP BY $wpdb->posts.ID ORDER BY ", $search_sql);

    return $search_sql;
  });
}
Last Updated:
Contributors: Niek Vlam, Suite Seven