WordPress sorgt dafür, wenn aktiviert, dass „schöne“ lesbare URLs genutzt werden. Lediglich die Suche ist davon bisher nicht betroffen; sie kommt mit der bekannten Syntax ?s
im Standard aus. Aber auch hier kann man ansetzen und die URL seinen Bedürfnissen entsprechend anpassen.
Das folgenden Beispiel soll es verdeutlichen. Im Standard von WordPress, trotz aktiver Permalinks, sieht die URL zu den beiden Suchbegriffen wordpress und beratung wie folgt aus: bueltge.de/?s=wordpress+beratung&submit=Search
. Mit Hilfe einer kleinen Funktion, die den Redirect anspricht, kann die URL angepasst werden. In meinem Fall, mit der zugehörigen nachfolgenden Funktion sieht die URL zu diesen beiden Suchbegriffen dann wie folgt aus: bueltge.de/search/wordpress+beratung
.
Die Funktion, die ich einsetze, seht im folgenden Abschnitt. Innerhalb der WP-Funktion wp_redirct
lege ich die Ausgabe fest, in dem ich den Begriff search zur home-url der Installation addiere und im Anschluss die Suchbegriffe ergänze. Dies kann man beliebig gestallten und je nach Anforderung so dass beste Ergebnis erziehlen.
function fb_change_search_url_rewrite() {
if ( is_search() && ! empty( $_GET['s'] ) ) {
wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) );
exit();
}
}
add_action( 'template_redirect', 'fb_change_search_url_rewrite' );
Die Funktion legt man im besten Falle in einem Plugin ab oder alternativ in der functions.php
des Themes. Schöne und verbesserte Lösungen sind wie immer willkommen und das Kommentarfeld steht dazu bereit.
Update
Aus den Kommentaren und Diskussionen ist ebenso eine Lösung entstanden, die explizit eine Lösung via Hook anspricht und so eine frei Benennung ohne Probleme zulässt; nicht desto trotz sollte man sich die Lösung via .htaccess überlegen.
function custom_search_url( $search_rewrite ) {
if( ! is_array( $search_rewrite ) )
return $search_rewrite;
$new_array = array();
foreach( $search_rewrite as $pattern => $s_query_string ) {
$new_array[ str_replace( 'search/', 'my-search-url/', $pattern ) ] = $s_query_string;
}
$search_rewrite = $new_array;
unset( $new_array );
return $search_rewrite;
}
add_filter( 'search_rewrite_rules', 'custom_search_url' );