Hướng dẫn tìm kiếm SKU trong form Woocommerce Search
26th Mar 2021Gầ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.
Add new comment