2017-09-22 4 views
0

私は、woocommerce管理者の製品バリエーションを含むすべての製品IDを検索したいという課題に直面しています。 woocommerce adminのバリデーションIDで商品を検索するには?woocommerce管理製品検索ボックスでバリエーションIDで変数プロダクトを検索するにはどうすればよいですか?

お願いします。

ありがとうございます。

+1

「バリエーション」を持つ可変の製品があります。 "変種"とは何も意味しません。**同じ変種製品のバリエーションであるため、商品 "バリエーション" **を検索することはできません。 – LoicTheAztec

+0

管理製品の検索ボックスに何とかIDで商品を検索する必要があります。バリエーションIDの場合は親商品が表示されます。それは、それが属する製品であることが分かります。 – Suman

+0

これはうまくいかないと思う...表示されるのは、バリエーション(プロダクトタイプではない)を除くすべてのプロダクトタイプだけです。だから、検索はバリエーションに作用しません...しかし、私は間違っているかもしれません。あなたの質問はあまりにも漠然としており、回答を得る機会があれば、明確で詳細なもので編集する必要があります。 (「バリアント」は、woocommerceでは何も意味しません。代わりに「バリエーション」を使用します)... – LoicTheAztec

答えて

1

最後に、フィルター "posts_search"を変更して上記の機能を実装しました。

郵便番号を使用すると、ウーマン・エキスパートの管理製品検索エリアのバリエーションIDで変数の商品を検索することができます。

add_filter('posts_search', 'product_search'); 

function product_search($where) { 

    global $pagenow, $wpdb, $wp; 

    if ('edit.php' != $pagenow || ! is_search() || ! isset($wp->query_vars['s']) || 'product' != $wp->query_vars['post_type']) { 
     return $where; 
    } 

    $search_ids = array(); 
    $terms  = explode(',', $wp->query_vars['s']); 

    foreach ($terms as $term){ 
     if (is_numeric($term)){ 
      $post_type = get_post_type($term); 
      if($post_type == 'product_variation'){ 
       $search_ids[] = wp_get_post_parent_id($term); 
      }else{ 
       $search_ids[] = $term; 
      } 
     } 
     // Attempt to get a SKU 
     $sku_to_id = $wpdb->get_results($wpdb->prepare("SELECT ID, post_parent FROM {$wpdb->posts} LEFT JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id WHERE meta_key='_sku' AND meta_value LIKE %s;", '%' . $wpdb->esc_like(wc_clean($term)) . '%')); 
     $sku_to_id = array_merge(wp_list_pluck($sku_to_id, 'ID'), wp_list_pluck($sku_to_id, 'post_parent')); 

     if (sizeof($sku_to_id) > 0) { 
      $search_ids = array_merge($search_ids, $sku_to_id); 
     } 
    } 

    $search_ids = array_filter(array_unique(array_map('absint', $search_ids))); 

    if (sizeof($search_ids) > 0) { 
     $where = str_replace('AND (((', "AND (({$wpdb->posts}.ID IN (" . implode(',', $search_ids) . ")) OR ((", $where); 
    } 
    return $where; 
} 
関連する問題