Question

J'ai deux taxonomies personnalisées appliquées à deux types de poste personnalisé. les termes liste dans la barre latérale très bien et la liste de tous les messages qui y sont associés. Cependant, si vous recherchez un des termes précis, il ne met pas un poste avec ce terme.

Exemple: http://dev.andrewnorcross.com/das/all-case-studies/ Rechercher le terme "PQRI"

Je ne reçois rien. Des idées? Je l'ai essayé d'utiliser différents plugins de recherche, mais ils cassent soit mes paramètres de recherche personnalisés ou ne fonctionnent pas.

Était-ce utile?

La solution

Je recommande Rechercher Tout Plugin trop, mais si vous souhaitez implémenter cela en utilisant la fonction de recherche de WP, voici le code que je utilise dans mon thème Atom:

// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23

function atom_search_where($where){
  global $wpdb;
  if (is_search())
    $where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')";
  return $where;
}

function atom_search_join($join){
  global $wpdb;
  if (is_search())
    $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
  return $join;
}

function atom_search_groupby($groupby){
  global $wpdb;

  // we need to group on post ID
  $groupby_id = "{$wpdb->posts}.ID";
  if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;

  // groupby was empty, use ours
  if(!strlen(trim($groupby))) return $groupby_id;

  // wasn't empty, append ours
  return $groupby.", ".$groupby_id;
}

add_filter('posts_where','atom_search_where');
add_filter('posts_join', 'atom_search_join');
add_filter('posts_groupby', 'atom_search_groupby');

Il est basé sur le plugin Tag-Search: http: // projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23

Autres conseils

Est-ce la recherche standard de WordPress? Parce que ne semble pas inclure taxonomies (même pas standard, comme les catégories et les étiquettes) dans la recherche. Les recherches de code dans post_title et post_content, mais si vous voulez inclure tout ce que vous devez brancher dans le filtre à posts_search.

J'ai essayé la solution de Onetrickpony ci-dessus https://wordpress.stackexchange.com/a/5404/37612, ce qui est génial, mais je trouve un problème là-bas, ce qui n'a pas fonctionné pour moi, et je voudrais faire une petite modification:

  1. si je cherchais une chaîne dans le titre de la taxonomie - il fonctionne très bien
  2. Si la taxonomie comporte des caractères spéciaux par exemple avec « trémas » allemand (ö, ä, ü) et on recherche oe, ae, d'utiliser insteda ue le caractère spécial - vous devez ajouter la recherche dans le bouchon de la taxonomie - OR t.slug LIKE '%".get_search_query()."%'

  3. si vous recherchez une combinaison d'une requête de recherche et un filtre de taxonomie - cela fonctionne aussi bien

  4. Mais le problème est, lorsque vous essayez d'utiliser uniquement le filtre de taxonomie - le crochet de recherche append une chaîne vide à la requête si aucun texte est recherché, et pour cette raison vous obtenez tous les messages dans le résultat, au lieu de seulement ceux de la taxonomie filtrée. Une simple instruction IF permet de résoudre le problème. Donc, tout le code modifié serait ce (fonctionne parfaitement bien pour moi!)

function custom_search_where($where){ 
  global $wpdb;
  if (is_search() && get_search_query())
    $where .= "OR ((t.name LIKE '%".get_search_query()."%' OR t.slug LIKE '%".get_search_query()."%') AND {$wpdb->posts}.post_status = 'publish')";
  return $where;
}

function custom_search_join($join){
  global $wpdb;
  if (is_search()&& get_search_query())
    $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
  return $join;
}

function custom_search_groupby($groupby){
  global $wpdb;

  // we need to group on post ID
  $groupby_id = "{$wpdb->posts}.ID";
  if(!is_search() || strpos($groupby, $groupby_id) !== false || !get_search_query()) return $groupby;

  // groupby was empty, use ours
  if(!strlen(trim($groupby))) return $groupby_id;

  // wasn't empty, append ours
  return $groupby.", ".$groupby_id;
}

add_filter('posts_where','custom_search_where');
add_filter('posts_join', 'custom_search_join');
add_filter('posts_groupby', 'custom_search_groupby');

J'ai le même niveau d'information comme janvier je sais qu'il est possible d'étendre la recherche avec des plugins aussi bien.

Recherche Tout (Plugin Wordpress) est ce que vous recherchez. Selon la liste des fonctionnalités, il prend désormais en charge taxonomies personnalisées.

Je trouve la réponse de onetrickpony être grand mais il traite toute recherche comme un seul terme et également ne pas traiter une expression de recherche ci-joint entre guillemets. J'ai modifié son code (en particulier, la fonction atom_search_where) un peu pour faire face à ces deux situations. Voici ma version modifiée de son code:

// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23

function atom_search_where($where){ 
    global $wpdb, $wp_query;
    if (is_search()) {
        $search_terms = get_query_var( 'search_terms' );

        $where .= " OR (";
        $i = 0;
        foreach ($search_terms as $search_term) {
            $i++;
            if ($i>1) $where .= " AND";     // --- make this OR if you prefer not requiring all search terms to match taxonomies
            $where .= " (t.name LIKE '%".$search_term."%')";
        }
        $where .= " AND {$wpdb->posts}.post_status = 'publish')";
    }
  return $where;
}

function atom_search_join($join){
  global $wpdb;
  if (is_search())
    $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
  return $join;
}

function atom_search_groupby($groupby){
  global $wpdb;

  // we need to group on post ID
  $groupby_id = "{$wpdb->posts}.ID";
  if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;

  // groupby was empty, use ours
  if(!strlen(trim($groupby))) return $groupby_id;

  // wasn't empty, append ours
  return $groupby.", ".$groupby_id;
}

add_filter('posts_where','atom_search_where');
add_filter('posts_join', 'atom_search_join');
add_filter('posts_groupby', 'atom_search_groupby');

J'ai le même problème qui se passe avec le plugin panier WooCommerce .. Mes résultats ne sont pas compris le terme de taxonomie personnalisée, « product_tag », car il pas une balise de poste standard. J'ai trouvé une solution dans cette autre thread StackOverflow à ce sujet:

https: / /stackoverflow.com/questions/13491828/how-to-amend-wordpress-search-so-it-queries-taxonomy-terms-and-category-terms

L'exemple de code par tkelly travaillé pour moi lors du remplacement du terme author dans son exemple avec product_tag selon nos besoins pour les plug-ins de panier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top