Wie man Taxonomie-Archiv-Seite mit Suchparameter ändert?

Ich habe Taxonomie als Thema bezeichnet.

Wenn der Benutzer diese Archivseite wie example.com/topics/wordpress/ landet, muss ich alle Beiträge, die wordpress Wort in Titel oder Beschreibung hat, wordpress .

Ich habe folgenden Code hinzugefügt, um es zu tun.

 function pp_change_page_layout( $query ) { if ( $query->is_main_query()) { if ( is_tax('topics') ){ $query->set('s' , 'WordPress'); // I hard code the search turm just for the testing purposes. I will take the archive slug. } } } add_action( 'pre_get_posts', 'pp_change_page_layout' ); 

Aber das ist nicht so, wie ich es will. Was dieser Code gemacht hat, nimmt zuerst alle Beiträge im Thema Taxonomie und dann filtern.

Ich möchte diesen Code wie folgt ändern.

Wenn der Benutzer example.com/topics/wordpress/ landet, muss ich alle Beiträge (nicht nur in dieser Taxonomie) in meinem Blog abrufen und dann nach WordPress Wort filtern. Wie man den obigen Code ändert, um es zu tun?

Solutions Collecting From Web of "Wie man Taxonomie-Archiv-Seite mit Suchparameter ändert?"

Die folgende Lösung gibt Beiträge zurück, die dem Namen des abgefragten Begriffs zugeordnet sind, oder Beiträge, die den Namen des Begriffs im Titel, Auszug oder Inhalt des Beitrags verwenden.

Beachten Sie, dass wir für die Suche den Namen des menschenlesbaren Terms verwenden, nicht den Begriff Slug, der für Suchvorgänge nicht ideal ist, da er getrennt werden könnte.

Fügen Sie zunächst der Suchanfrage den Namen der Taxonomiebezeichnung hinzu und verdrahten Sie den Filter, um die Such-SQL zu ändern:

 /** * Adds taxonomy term name to search query and wires up posts_search * filter to change the search SQL. * * @param WP_Query $query The WP_Query instance (passed by reference). */ add_action( 'pre_get_posts', 'wpse_add_term_search_to_term_archive' ); function wpse_add_term_search_to_term_archive( $query ) { // Bail if this is the admin area or not the main query. if ( is_admin() || ! $query->is_main_query() ) { return; } // Set the taxonomy associated with our term. Customize as needed. $taxonomy_slug = 'genre'; // Get the term being used. $term_slug = get_query_var( $taxonomy_slug ); if ( is_tax( $taxonomy_slug ) && $term_slug ) { // We have the term slug, but we need the human readable name. This // will be available in the term object. $term_object = get_term_by( 'slug', $term_slug, $taxonomy_slug ); // Bail if we can't get the term object. if ( ! $term_object ) { return; } // Sets this query as a search and uses the current term for our search. $query->set( 's' , $term_object->name ); // Wire up a filter that will alter the search SQL so that the term archive // will include search results matching the term name *OR* posts assigned to // the term being queried. add_filter( 'posts_search', 'wpse_tax_term_posts_search', 10, 2 ); } } 

Ändern Sie anschließend die Such-SQL, sodass entweder die Steueranfrage oder die Suchanfrage zurückgegeben wird:

 /** * Change the search SQL so that results in the tax query OR * the search query will be returned. * * @param string $search Search SQL for WHERE clause. * @param WP_Query $wp_query The current WP_Query object. */ function wpse_tax_term_posts_search( $search, $wp_query ) { // Replaces the first occurrence of " AND" with " OR" so that results in the // tax query OR the search query will be returned. return preg_replace( '/^\s(AND)/', ' OR', $search ); }