2017-09-22 3 views
0

Je suis confronté au problème que je veux rechercher tous les ID de produit, y compris les variantes de produits dans l'administration woocommerce. Comment rechercher le produit par l'ID de variation dans l'admin de woocommerce?Comment faire une recherche de produit variable par son id de variation dans la boîte de recherche de produit d'admin de woocommerce?

pouvez-vous s'il vous plaît m'aider?

Merci d'avance.

+1

Il existe des produits variables qui ont des "variations". "Variants" ne veut rien dire ... ** Il n'est pas possible de rechercher des "variations" de produits **, car ce sont des variations du même produit variable. – LoicTheAztec

+0

J'ai besoin de rechercher des produits en quelque sorte avec l'ID dans la boîte de recherche de produit d'administration et si c'est un Id de variations, alors le produit parent sera énuméré. Pour qu'il puisse être identifié, de quel produit il appartient aussi. – Suman

+0

Je pense que cela ne marchera pas ... Les seuls produits affichés sont tous les types de produits sauf les variations (qui ne sont pas un type de produit). Donc, la recherche ne fonctionne pas sur les variations ... Mais peut-être que je me trompe. Votre question est trop vague et devrait être éditée avec quelque chose de clair et détaillé, si vous voulez avoir une chance d'obtenir une réponse. ("variantes" ne signifie rien dans woocommerce, utilisez plutôt "variations") ... – LoicTheAztec

Répondre

1

Enfin j'ai implémenté la fonctionnalité ci-dessus en modifiant le filtre "posts_search".

En utilisant le code ci-dessous, vous pouvez rechercher des produits variables en fonction de leurs variations dans la zone de recherche de produits de l'administration woocommerce.

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; 
}