J'ai réécrit le search_base
en suche
(allemand) pour obtenir une URL comme celle-ci: http://mypage.com/suche/searchterm
Maintenant, lorsque je soumets le formulaire de recherche, je reçois l'URL /?s=searchterm
.
Internetz me donne la même solution de contournement à partir de plusieurs sources, telles que celle-ci: RL des résultats de la recherche sans variables de chaîne de requête
add_action("template_redirect", function() {
if (is_search() && !empty( $_GET["s"] ) ) {
if (wp_redirect( home_url('/suche/') . urlencode(get_query_var('s')) )) {
exit();
}
}
});
Mon problème avec cette solution:
suche
en dur, alors que j'aimerais utiliser la base de recherche modifiéeJ'ai essayé de créer mon propre formulaire de recherche personnalisé avec add_filter("get_search_form", ...
avec action="http://mypage.com/suche/
, ce qui entraînait toujours un get var /suche/?s=searchterm
qui ne fonctionnait évidemment pas.
Comment puis-je indiquer au formulaire de recherche d'aller directement à /suche/searchterm
Merci!
En supposant que vous fassiez en sorte que l'action de votre formulaire pointe sur la bonne URL, voici deux (et demi) options:
Avec Javascript (jQuery)
jQuery(document).ready( function() {
jQuery("#searchform").submit( function() {
self.location.href = jQuery(this).attr("action") + jQuery("#s").val();
return false;
});
});
Vous pouvez également le faire sans jQuery (si vous n'utilisez pas jQuery sur votre site et ne voulez pas le charger uniquement pour cela). Voici une version simple de celui-ci (probablement pas du navigateur super cross, mais je ne l'ai pas testé), sur laquelle vous pouvez développer:
<form action="/suche/" onsubmit="self.location.href=this.getAttribute('action') + document.getElementById('s').value; return false;">
<input type="text" name="s" id="s" />
<input type="submit"></form>
Avec une règle de réécriture:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^s=(.*)
RewriteRule ^(.*?)/?$ $1/%1? [R=302,L]
Cela fonctionnerait sur n'importe quelle URL qui obtient? S = ... passé, vous voudrez peut-être limiter cela à votre recherche réelle, comme dans
RewriteEngine On
RewriteCond %{QUERY_STRING} ^s=(.*)
RewriteRule ^suche/$ /suche/%1? [R=302,L]
Et si vous transmettez plusieurs arguments sous cette forme (par exemple, une catégorie et une chaîne à rechercher), vous devrez l'adapter en conséquence. Pour le moment, cela suppose simplement qu'il n'y a qu'un seul paramètre, c'est la chaîne de requête.