Advertisement
BeniSt

WooCommerce - Search by sku

Apr 10th, 2020
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.40 KB | None | 0 0
  1. add_filter('posts_search', 'product_search_add_sku',8);
  2.  
  3. function product_search_add_sku($where) {
  4.     global $pagenow, $wpdb, $wp;
  5.  
  6.     if ((is_admin() && 'edit.php' != $pagenow)
  7.         || !is_search()
  8.         || !isset($wp->query_vars['s'])
  9.         || (isset($wp->query_vars['post_type']) && 'product' != $wp->query_vars['post_type'])
  10.         || (isset($wp->query_vars['post_type']) && is_array($wp->query_vars['post_type']) && !in_array('product', $wp->query_vars['post_type']) )
  11.     ) {
  12.         return $where;
  13.     }
  14.     $search_ids = array();
  15.     $terms = explode(',', $wp->query_vars['s']);
  16.  
  17.     foreach ($terms as $term) {
  18.         if (is_admin() && is_numeric($term)) {
  19.             $search_ids[] = $term;
  20.         }
  21.  
  22.         $sku_to_parent_id = $wpdb->get_col($wpdb->prepare("SELECT p.post_parent as post_id FROM {$wpdb->posts} as p join {$wpdb->postmeta} pm on p.ID = pm.post_id and pm.meta_key='_sku' and pm.meta_value LIKE '%%%s%%' where p.post_parent <> 0 group by p.post_parent", wc_clean($term)));
  23.  
  24.         $sku_to_id = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_sku' AND meta_value LIKE '%%%s%%';", wc_clean($term)));
  25.         $search_ids = array_merge($search_ids, $sku_to_id, $sku_to_parent_id);
  26.     }
  27.  
  28.     $search_ids = array_filter(array_map('absint', $search_ids));
  29.     if (sizeof($search_ids) > 0) {
  30.         $where = str_replace(')))', ") OR ({$wpdb->posts}.ID IN (" . implode(',', $search_ids) . "))))", $where);
  31.     }
  32.  
  33.     return $where;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement