@pixolin
Danke für deine Antwort. Jetzt habe ich die Domain so https://www.agw-international.com/search?q= , aber wenn ich etwas suche erhalte ich Page Not Found.
¯\_(ツ)_/¯
Ich hab das Tutorial nicht geschrieben und weiß auch nicht, was du jetzt wie umgesetzt hast. Es werden ja verschiedene Lösungswege angeboten.
@pixolin
In meiner functions.php habe ich dass so hinzugrefügt:
function wpb_change_search_url() {
if ( is_search() && ! empty( $_GET['s'] ) ) {
wp_redirect( home_url( "/search?q=" ) . urlencode( get_query_var( 's' ) ) );
exit();
}
}
add_action( 'template_redirect', 'wpb_change_search_url' );
Hallo,
teste doch mal bitte:
function wp_change_search_url() {
if ( is_search() && ! empty( $_GET['s'] ) ) {
wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) );
exit();
}
}
add_action( 'template_redirect', 'wp_change_search_url' );
Quelle – habe ich hier getestet und funktioniert.
Viele Grüße
Hans-Gerd
Danke @hage! Jetzt nur meine Frage kann man statt ,,/search/serch-begriff“ auch ,,/search?q=“ machen.
Der Teil der URL, der mit dem Fragezeichen beginnt, ist ein GET-Parameter, der der Seite übergeben wird. Zu einem Parameter ?g=
ist aber keine Funktion hinterlegt. Die müsstest du erst hinzufügen.
— — —
Etwas ausführlicher:
Wenn du folgenden Code verwendest
<?php
echo 'Hallo ' . htmlspecialchars($_GET["name"]) . '!';
?>
wird bei Abruf von https://example.com/?name=agw2020
der Text Hallo agw2020!
ausgegeben. Rufst du jetzt die URL mit einem anderen GET-Parameter auf, also z.B. https://example.com/?user=agw2020
, wird nur Hallo !
ausgegeben – der GET-Parameter name
wurde nicht übergeben und für den GET-Parameter user
fehlt eine Ausgabe.
Um jetzt den GET-Parameter ?q=
für eine Suche zu verwenden, müsstest du auf der Seite mit dem Suchformular eine Such-Query erstellen, die den GET-Parameter als Argument verwendet.
@pixolin
Danke für deine informative Antwort. Nur mein Problem ist, dass ich keine Datei namens searchform.php oder ähnliche habe. Aber irgendwo sollte es eine geben, wenn würde es nicht funktionieren, oder?
searchform.php
ist ein Template für das Suchformular, z.B. in Twenty Twenty.
Gibt es dafür kein Template, wertet WordPress den GET-Parameter trotzdem aus und fällt auf ein allgemeineres Template zurück.
Es gibt noch andere GET-Parameter, die auf jeder Webseite funktionieren, z.B https://example.com/?p=42
zum Abruf des Posts mit der Datenbank-ID 42 (kann eine Seite oder ein Beitrag sein – „post“ gilt hier im weiteren Sinn als Datenbankeintrag in der Tabelle wp_posts
).
Mit add_query_arg()
kannst du weitere GET-Parameter verwenden. Vielleicht kommst du damit weiter. Dokumentation: https://developer.wordpress.org/reference/functions/add_query_arg/
Die Abfrage https://example.com/?s=begriff
funktioniert übrigens bei jeder WordPress-Website, unabhängig ob es ein Suchformular gibt. Ich halte es für keine gute Idee, daran rumzubiegen.