Hướng dẫn tìm kiếm SKU trong form Woocommerce Search

26th Mar 2021
Table of contents

Gần đây, một khách hàng đã yêu cầu thêm sku vào tìm kiếm sản phẩm woocommerce trên trang web của anh ấy. Anh ấy muốn khách hàng của mình dễ dàng tìm thấy sản phẩm bằng cách nhập sku trên thanh tìm kiếm sản phẩm.

Tôi đã tìm thấy hầu hết mã trong codex ở đây nhưng nó không hoạt động tốt. Vì vậy, tôi đã phải thực hiện một sự điều chỉnh. Đây là phiên bản hoàn thiện. Đặt nó vào tệp functions.php của bạn hoặc tạo một plugin đơn giản.

/* Add sku to product search */
function az_pre_get_posts( $query ) {
// conditions - change the post type clause if you're not searching woocommerce or 'product' post type
if ( is_admin() || ! $query->is_main_query() || ! $query->is_search() || ! get_query_var('post_type')=='product' ){
   return;
}
add_filter('posts_join', 'az_search_join' );
add_filter('posts_where', 'az_search_where' );
add_filter('posts_groupby', 'az_search_groupby' );

}
add_action( 'pre_get_posts', 'az_pre_get_posts' );

function az_search_join( $join ){
   global $wpdb;
   $join .= " LEFT JOIN $wpdb->postmeta gm ON (" . 
   $wpdb->posts . ".ID = gm.post_id AND gm.meta_key='_sku')"; // change to your meta key if not woo

   return $join;
}

function az_search_where( $where ){
   global $wpdb;
   $where = preg_replace(
     "/\(\s*{$wpdb->posts}.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
     "({$wpdb->posts}.post_title LIKE $1) OR (gm.meta_value LIKE $1)", $where );
   return $where;
}
/* grouping by id to make sure no dupes */
function az_search_groupby( $groupby ){
   global $wpdb;
   $mygroupby = "{$wpdb->posts}.ID";
   if( preg_match( "/$mygroupby/", $groupby )) {
     // grouping we need is already there
     return $groupby;
   }
   if( !strlen(trim($groupby))) {
      // groupby was empty, use ours
      return $mygroupby;
   }
   // wasn't empty, append ours
   return $groupby . ", " . $mygroupby;
}

Tôi hy vọng điều này sẽ giúp bạn tạo tìm kiếm sản phẩm tốt hơn cho Woocommerce. Như bạn có thể thấy, mã này có thể được điều chỉnh khi cần thiết để bao gồm các siêu dữ liệu khác. Hãy liên hệ với chúng tôi nếu bạn có thắc mắc.

Bạn thấy bài viết này như thế nào?
1 reaction

Add new comment

Image CAPTCHA
Enter the characters shown in the image.
Câu nói tâm đắc: “Điều tuyệt với nhất trong cuộc sống là làm được những việc mà người khác tin là không thể!”

Related Articles

Nếu bạn muốn liệt kê tất cả các danh mục có sẵn cho một loại bài đăng tùy chỉnh, đoạn mã này có thể giúp bạn.

WP_Query là một lớp mạnh mẽ và cung cấp nhiều bộ lọc và hành động mà bạn có thể sử dụng để thay đổi cách vòng lặp WordPress hiển thị dữ liệu và cách truy vấn truy xuất dữ liệu.

If you want to build a simple, similar post list – in a single page view – when you query the latest or random posts from a post type you can use WP_Query.