Wie übergibt man einen Such-Parameter $ _GET an eine neue benutzerdefinierte Suchseite?

Bisher habe ich in meiner WordPress-Installation eine komplette WordPress-Suchseite, die ich aufrufen kann, indem ich gehe:

/?s=mysearchstring

Und das durchsucht WordPress-Seiten, die die Zeichenfolge ” mysearchstring ” enthalten.

Also habe ich eine neue Seite “Custom Search” ( /custom-search/ ) erstellt und eine Template-Datei custom-search.php (gleicher Code wie search.php ) zugewiesen.

Wie kann ich einen Keyword-Parameter hinzufügen?

/custom-search?s=mysearchstring funktioniert nicht ganz, es wird nur 404 Seite nicht gefunden angezeigt, während /custom-search/ eine Suchseite als einziges Ergebnis anzeigt.

custom-search.php Code :

 get_queried_object(); if(isset($content_array->ID)){ $post_id = $content_array->ID; } else $post_id=0; $template_uri = get_template_directory_uri(); //Search $allsearch = &new WP_Query("s=$s&showposts=-1"); $count = $allsearch->post_count; wp_reset_query(); $hits = $count == 1 ? $count." ".__("hit for","goodweb") : $count." ".__("hits for","goodweb"); get_header(); ?> 

zusammen mit der HTML-Liste.

Was kann ich tun, um die Parametersuche an diese Seite zu übergeben?

Solutions Collecting From Web of "Wie übergibt man einen Such-Parameter $ _GET an eine neue benutzerdefinierte Suchseite?"

Problem ist, dass 's' param ist ein Standard-Abfrage-Parameter von WordPress, wenn Sie die URL /custom-search?s=mysearchstring Sie sagen zu WordPress, um die Seite 'custom-search' 'mysearchstring' , die die Zeichenfolge 'mysearchstring' und enthalten das bringt einen 404.

Sie haben 2 Möglichkeiten:

  1. Verwenden Sie einen anderen Namen für die /custom-search?cs=mysearchstring , etwa /custom-search?cs=mysearchstring dann in der Seitenvorlage die Variable $_GET['cs'] anstelle der Variablen $_GET['s']
  2. sende alle deine Suchen an home url: /?s=mysearchstring aber /?s=mysearchstring 'template_include' , um custom-search.php anstelle von search.php . Dies kann getan werden, ohne eine Seite ‘custom-search’ zu erstellen.

Lösung 1

Sie müssen nur die Abfragezeichenfolge 'cs' anstelle von 's' und dann in Ihrer Vorlage Folgendes verwenden:

 // ... $s = filter_input(INPUT_GET, 'cs', FILTER_SANITIZE_STRING); $allsearch = &new WP_Query("s=$s&showposts=-1"); // ... 

Lösung 2

Löschen Sie die Seite “custom-page”, die die Vorlage "Custom Search" : Sie brauchen sie nicht. Sie können die Vorlagenheader überhaupt entfernen, wenn Sie möchten.

Senden Sie alle Ihre Suchanfragen an /?s=mysearchstring .

Jetzt zu deinen functions.php hinzufügen

 add_filter('template_include', 'my_custom_search_template'); function my_custom_search_template( $template ) { if ( is_search() ) { $ct = locate_template('custom-search.php', false, false); if ( $ct ) $template = $ct; } return $template; } 

Auf diese Weise werden alle Suchanfragen mit Ihrer custom-search.php angezeigt (falls vorhanden). Beachten Sie, dass die Suche bereits in der Hauptabfrage durchgeführt wurde, sodass Sie sie nicht erneut ausführen müssen, wenn Sie posts_per_page auf -1 setzen pre_get_posts : pre_get_posts :

 add_action('pre_get_posts', 'search_no_paging'); function search_no_paging( $q ) { if ( $q->is_main_query() && $q->is_search() && ! is_admin() ) { $q->set('posts_per_page', -1); } } 

Und in deiner custom-search.php verwende:

 global $wp_query; $count = $wp_query->post_count; $hits = $count == 1 ? $count." ".__("hit for","goodweb") : $count." ".__("hits for","goodweb"); get_header(); while( have_posts() ) { the_post(); // your loop here } 

Wie Sie sehen können, müssen Sie keine benutzerdefinierte Abfrage ausführen, da die Hauptabfrage funktioniert.


Lösung 1 ist die beste Wahl, wenn Sie den Seiteninhalt neben den Suchergebnissen anzeigen möchten. Wenn Sie jedoch diese Seite ohne Inhalt erstellen, mit dem einzigen Ziel, die benutzerdefinierte Vorlage für Suchergebnisse zu verwenden, ist die Lösung 2 besser, weil:

  1. ist themenunabhängig: Code kann in ein Plugin eingefügt und mit jedem Thema verwendet werden, und auch diese Seite muss nicht im Backend erstellt werden
  2. ist leistungsfähiger: Wenn Sie Lösung 1 verwenden, werden zwei Abfragen ausgeführt: die erste, um die Seite zu erhalten, die zweite, um Suchergebnisse zu erhalten; Mit Lösung 2 wird nur eine Abfrage ausgeführt

Ein GET String funktioniert genauso wie in jeder anderen PHP-Anwendung, aber Sie können keinen Abfrageparameter verwenden, den WordPress verwendet . Das ist das Problem hier. WordPress verwendet bereits s . Benutze etwas anderes, wie ‘mys’.

Ehrlich gesagt, Ihre benutzerdefinierte Suche sieht fast wie eine normale Suche aus, so dass ich nicht wirklich verstehe, warum Sie das tun.