Fügen Sie benutzerdefinierte Taxonomiebegriffe in die Suche ein

Ich habe zwei benutzerdefinierte Taxonomien auf zwei benutzerdefinierte Post-Typen angewendet. die Begriffe Liste auf der Seitenleiste ist in Ordnung und wird alle damit verbundenen Beiträge auflisten. Wenn Sie jedoch nach einem bestimmten Begriff suchen, wird kein Beitrag mit diesem Begriff angezeigt.

Beispiel: http://dev.andrewnorcross.com/das/all-case-studies/ Suche nach Begriff “PQRI”

Ich bekomme nichts. Irgendwelche Ideen? Ich habe versucht, verschiedene Such-Plugins zu verwenden, aber sie brechen entweder meine benutzerdefinierten Suchparameter oder funktionieren einfach nicht.

Solutions Collecting From Web of "Fügen Sie benutzerdefinierte Taxonomiebegriffe in die Suche ein"

Ich würde das Search Everything Plugin auch empfehlen, aber wenn Sie dies mit der Suchfunktion von WP implementieren möchten, ist hier der Code, den ich in meinem Atom-Theme verwende:

// 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'); 

Es basiert auf dem Tag-Search-Plugin: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23

Ist das die Standard-WordPress-Suche? Weil das anscheinend keine Taxonomien (nicht einmal Standard, wie Kategorien und Tags) in die Suche einbezieht. Der Code sucht in post_title und post_content , aber wenn Sie etwas anderes post_content möchten, sollten Sie den posts_search Filter verwenden.

Ich habe versucht, die Lösung von Onetrickpony über https://wordpress.stackexchange.com/a/5404/37612 , das ist großartig, aber ich fand ein Problem dort, das nicht für mich funktioniert, und ich würde eine kleine Änderung machen:

  1. wenn ich im Titel der Taxonomie nach einer Zeichenkette gesucht habe – das funktioniert super
  2. Wenn die Taxonomie Sonderzeichen hat, zB mit deutschen Umlauten (ö, ä, ü) und man nach oe, ae, ue insteda nach dem speziellen char sucht, muss man die Suche in den Slug der Taxonomie einfügen – OR t.slug LIKE '%".get_search_query()."%'

  3. Wenn Sie nach einer Kombination aus einer Suchanfrage und einem Taxonomiefilter suchen, funktioniert das auch

  4. Aber das Problem ist, wenn Sie versuchen, nur den Taxonomie-Filter zu verwenden – der Such-Hook an die Abfrage einen leeren String anhängen, wenn kein Text gesucht wird, und aus diesem Grund erhalten Sie ALLE Beiträge im Ergebnis, anstatt nur die aus dem gefilterte Taxonomie. Eine einfache IF-statement triggers das Problem. Also wäre der ganze modifizierte Code das (funktioniert vollkommen in Ordnung für mich!)

 function custom_search_where ($ wo) { 
   global $ wpdb;
   if (is_search () && get_search_query ())
     $ wo. = "ODER ((t.name LIKE '%". get_search_query (). "%' ODER t.slug LIKE '%". get_search_query (). "%') UND {$ wpdb-> posts} .post_status = 'veröffentlichen') ";
   Rückgabe $ wo;
 }

 function custom_search_join ($ join) {
   global $ wpdb;
   if (is_search () && get_search_query ())
     $ join. = "LINKER JOIN {$ wpdb-> term_relationships} tr EIN {$ wpdb-> posts} .ID = tr.object_id INNERER JOIN {$ wpdb-> term_taxonomie} tt ON tt.term_taxonomie_id = tr.term_taxonomy_id INNER JOIN { $ wpdb-> Begriffe} t ON t.term_id = tt.term_id ";
   return $ beitreten;
 }

 function custom_search_groupby ($ groupby) {
   global $ wpdb;

   // Wir müssen nach der Post-ID gruppieren
   $ groupby_id = "{$ wpdb-> Beiträge} .ID";
   if (! is_search () || strpos ($ groupby, $ groupby_id)! == false ||! get_search_query ()) return $ groupby;

   // groupby war leer, benutze unsere
   if (! strlen (trim ($ groupby))) gibt $ groupby_id zurück;

   // war nicht leer, append unsere
   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');

Ich habe das gleiche Informationsniveau wie Jan. Ich weiß, dass es möglich ist, die Suche auch mit Plugins zu erweitern.

Wahrscheinlich suchen Sie alles (WordPress Plugin) ist was Sie suchen. Gemäß der Feature-Liste werden jetzt benutzerdefinierte Taxonomien unterstützt.

Ich habe das gleiche Problem mit dem WooCommerce Cart-Plugin. Meine Suchergebnisse beinhalten nicht den benutzerdefinierten Taxonomie-Begriff ‘product_tag’, da es kein Standard-Post-Tag ist. Ich habe in diesem anderen StackOverflow-Thread eine Lösung gefunden:

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

Das Codebeispiel von tkelly arbeitete für mich, als ich in product_tag Beispiel den Begriff author durch product_tag nach unseren Bedürfnissen für die Cart-Plugins ersetzte.

Ich fand die Antwort von onetrickpony großartig, aber es behandelt jede Suche als einen einzelnen Begriff und behandelt auch keine Suchanfragen, die in Anführungszeichen eingeschlossen sind. Ich habe seinen Code (speziell die function atom_search_where ) etwas modifiziert, um mit diesen beiden Situationen umzugehen. Hier ist meine modifizierte Version seines Codes:

 // 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');