Suche mit Post ID

Ich möchte eine Post-ID in das Suchfeld eingeben können, damit der genaue Post in den Suchergebnissen angezeigt wird. Ich würde auch gerne die Möglichkeit behalten, die Beiträge / Seitentitel und Inhalte zu durchsuchen.

ZB gibt Benutzer ‘# 123’ in das Suchfeld ein, und die Suchergebnisse geben nur Post 123 zurück. Wenn ich jedoch ‘123’ in das Suchfeld eingeben würde, würde es jeden Post / jede Seite zurückgeben, die ‘123’ enthält der Inhalt oder der Titel.

Dieser Artikel erklärt, wie ich innerhalb des Admins erreichen kann, was ich will – ich brauche nur das Äquivalent für das Front-End!

Jede Hilfe wird sehr geschätzt, danke.

Solutions Collecting From Web of "Suche mit Post ID"

Ich habe zuvor meine eigene Frage zum Anpassen einer Suche gestellt und beantwortet. Sie finden diese Antwort hier: Der richtige Weg, um eine benutzerdefinierte Suchseite für komplexe benutzerdefinierte Post-Typen zu erstellen . Es wird eine gute Lektüre sein, die Ihnen hilft, den folgenden Code zu verstehen.

Ich verwende die Aktion pre_get_posts , um Ihre Suche zu ändern, wenn Sie nach einer positiven Ganzzahl suchen. Beachten Sie, dass der von mir bereitgestellte Code nicht die Suche nach positiven ganzen Zahlen in Ihrem Artikel ermöglicht.

 function my_search_pre_get_posts($query) { // Verify that we are on the search page that that this came from the event search form if($query->query_vars['s'] != '' && is_search()) { // If "s" is a positive integer, assume post id search and change the search variables if(absint($query->query_vars['s'])) { // Set the post id value $query->set('p', $query->query_vars['s']); // Reset the search value $query->set('s', ''); } } } // Filter the search page add_filter('pre_get_posts', 'my_search_pre_get_posts'); 

Wenn Sie nach ID und einer Suchzeichenfolge suchen möchten, würde ich empfehlen, mehrere Eingaben zu verwenden. Sie können auch andere Logik innerhalb der bereitgestellten function verwenden, um Annahmen darüber zu treffen, wonach der Benutzer sucht, und die Abfragevariablen entsprechend zu ändern.

Beachten Sie, dass dieser Code nicht getestet wurde.

Sie können dies verwenden

  function my_search_pre_get_posts($query) { // If it's not a search return if( !isset( $query->query_vars['s'] ) ) return; // If it's a search but there's no prefix, return if( '#' != substr( $query->query_vars['s'], 0, 1 ) ) return; // Validate the numeric value $id = absint( substr( $query->query_vars['s'], 1 ) ); if( !$id ) return; // Return if no ID, absint returns 0 for invalid values // If we reach here, all criteria is fulfilled, unset search and select by ID instead unset( $query->query_vars['s'] ); $query->query_vars['p'] = $id; } // Filter the search page add_filter('pre_get_posts', 'my_search_pre_get_posts'); 

Dies ist nicht getestet, überprüfen Sie die Code-Kommentare:

 function my_search_pre_get_posts( $query ) { // Verify that we are on the search page that that this came from the event search form if($query->query_vars['s'] != '' && is_search()) { // If "s" is a positive integer, assume post id search and change the search variables if(absint($query->query_vars['s'])) { // Set the post id value $query->set('p', $query->query_vars['s']); // Reset the search value $query->set('s', ''); } } } // Filter the search page add_filter('pre_get_posts', 'my_search_pre_get_posts');