WooCommerce製品検索をカスタム分類法とカスタムフィールドに拡張します
Aug 22 2020
高度なwoocommerce検索を作成していますが、検索クエリにsku、product_tag、product_categoryを追加したいと思います。以下では、複数の分類法の検索を有効にするWooCommerce製品検索回答コードで[カスタム分類法を有効にする]を使用しています。
add_filter( 'posts_search', 'woocommerce_search_product_tag_extended', 999, 2 );
function woocommerce_search_product_tag_extended( $search, $query ) {
global $wpdb, $wp;
$qvars = $wp->query_vars;
if ( is_admin() || empty($search) || ! ( isset($qvars['s'])
&& isset($qvars['post_type']) && ! empty($qvars['s'])
&& $qvars['post_type'] === 'product' ) ) { return $search;
}
// Here set your custom taxonomies in the array
$taxonomies = array('product_tag', 'product_cat'); $tax_query = array('relation' => 'OR'); // Initializing tax query
// Loop through taxonomies to set the tax query
foreach( $taxonomies as $taxonomy ) {
$tax_query[] = array( 'taxonomy' => $taxonomy,
'field' => 'name',
'terms' => esc_attr($qvars['s']), ); } // Get the product Ids $ids = get_posts( array(
'posts_per_page' => -1,
'post_type' => 'product',
'post_status' => 'publish',
'fields' => 'ids',
'tax_query' => $tax_query, ) ); if ( sizeof( $ids ) > 0 ) {
$search = str_replace( 'AND (((', "AND ((({$wpdb->posts}.ID IN (" . implode( ',', $ids ) . ")) OR (", $search);
}
return $search;
}
検索クエリに製品のSKUも追加したいのですが、どのように追加しますか?
回答
3 LoicTheAztec Aug 22 2020 at 22:14
以下は、製品検索を複数の分類法(製品カテゴリと製品タグ)および複数のカスタムフィールド(ここではSKUとして)に拡張します。
add_filter( 'posts_search', 'woocommerce_search_product_mega_extended', 999, 2 );
function woocommerce_search_product_mega_extended( $search, $query ) {
global $wpdb, $wp;
$qvars = $wp->query_vars;
if ( is_admin() || empty($search) || ! ( isset($qvars['s'])
&& isset($qvars['post_type']) && ! empty($qvars['s'])
&& $qvars['post_type'] === 'product' ) ) { return $search;
}
// SETTINGS:
$taxonomies = array('product_tag', 'product_cat'); // Here set your custom taxonomies in the array $meta_keys = array('_sku'); // Here set your product meta key(s) in the array
// Initializing tax query
$tax_query = count($taxonomies) > 1 ? array('relation' => 'OR') : array();
// Loop through taxonomies to set the tax query
foreach( $taxonomies as $taxonomy ) {
$tax_query[] = array( 'taxonomy' => $taxonomy,
'field' => 'name',
'terms' => esc_attr($qvars['s']), ); } // Get the product Ids from taxonomy(ies) $tax_query_ids = (array) get_posts( array(
'posts_per_page' => -1,
'post_type' => 'product',
'post_status' => 'publish',
'fields' => 'ids',
'tax_query' => $tax_query, ) ); // Initializing meta query $meta_query = count($meta_keys) > 1 ? array('relation' => 'OR') : array(); // Loop through taxonomies to set the tax query foreach( $taxonomies as $taxonomy ) { $meta_query[] = array(
'key' => '_sku',
'value' => esc_attr($qvars['s']), ); } // Get the product Ids from custom field(s) $meta_query_ids = (array) get_posts( array(
'posts_per_page' => -1,
'post_type' => 'product',
'post_status' => 'publish',
'fields' => 'ids',
'meta_query' => $meta_query, ) ); $product_ids = array_unique( array_merge( $tax_query_ids, $meta_query_ids ) ); // Merge Ids in one array with unique Ids
if ( sizeof( $product_ids ) > 0 ) { $search = str_replace( 'AND (((', "AND ((({$wpdb->posts}.ID IN (" . implode( ',', $product_ids ) . ")) OR (", $search); } return $search;
}
コードは、アクティブな子テーマ(またはアクティブなテーマ)のfunctions.phpファイルに入ります。テストされ、動作します。
関連:WooCommerce製品検索でカスタム分類を有効にする