J'ai cette fonction dans mon functions.php d'un build localhost: -
function custom_rewrite() {
add_rewrite_rule('.*', 'http://example.com/', 'top');
}
add_action('init', 'custom_rewrite');
Autant que je sache, cela devrait rediriger any page vers example.com. Mais ça ne marche pas. La page se charge normalement, sans redirection. J'ai essayé de rincer après avoir ajouté la règle, mais pas de joie.
Évidemment, je ne veux pas réellement rediriger toutes les pages comme celle-ci, mais j'essaie d'obtenir une réécriture de base avant de l'ajuster à mes besoins. Mais je ne peux même pas surmonter ce premier obstacle!
J'ai suivi d'innombrables tutoriels en ligne et je ne parviens pas à les faire fonctionner. Existe-t-il une condition préalable à l'utilisation de add_rewrite_rule? Et si non, n'importe qui a une idée pourquoi cela ne fonctionnera pas? Est-ce parce que je suis dans un environnement localhost?
Tout avis serait grandement apprécié!
MODIFIER
J'ai suivi les conseils de Jack et changé ma règle de réécriture en: -
add_rewrite_rule('.*', 'index.php?page_id=81', 'top');
Mais je n'ai toujours pas de chance. J'ai aussi essayé de changer le. * Catch all à un pagename existant comme ceci: -
add_rewrite_rule('^testpage/?', 'index.php?page_id=81', 'top');
Et toujours pas de redirection.
La page avec l'ID 81 existe comme "page de test". Je suis perplexe. Les règles de réécriture doivent-elles fonctionner sur une version localhost? Toute autre illumination peut offrir?
En développant mon commentaire:
L'API de réécriture sert à la réécriture d'URL, pas à la redirection. Donc, l'URL ne changera pas. Vous venez de dire à WordPress que /testpage/
devrait charger page_id
81
, mais l'URL serastay/testpage/
.
Quoi qu'il en soit, j'ai essayé ce qui suit (où 501 est un identifiant existant sur mon installation) et cela a bien fonctionné, en chargeant le contenu et le modèle de cette page:
function wpse_283104_rewrite() {
add_rewrite_rule('^testpage/?', 'index.php?page_id=501', 'top');
}
add_action( 'init', 'wpse_283104_rewrite' );
Assurez-vous que vous êtes effacez les règles de réécriture quoique. Cela ne fonctionnera que si vous le faites.
Si vous voulez juste faire des redirections, alors .htaccess ou un plugin est probablement le chemin à parcourir.
Si vousreallysouhaitez utiliser une règle de réécriture pour une redirection, vous devez alors réécrire l'URL pour définir une variable personnalisée var, puis cochez-la dans le crochet template_redirect
et effectuer une redirection.
Premièrement, nous allons créer une requête personnalisée appelée wpse_283104_redirect. A query var is a query string that WordPress recognises. We need to tell WordPress to see
? Wpse_283104_redirect = 1in a rewrite so that we can check it later. This is done by filtering the
query_vars`:
function wpse_283104_query_vars( $vars ) {
$vars[] = 'wpse_283104_redirect';
return $vars;
}
add_filter( 'query_vars', 'wpse_283104_query_vars' );
Vient ensuite la règle de réécriture:
function wpse_283104_rewrite() {
add_rewrite_rule( '^testpage/?', 'index.php?wpse_283104_redirect=1', 'top' );
}
add_action( 'init', 'wpse_283104_rewrite' );
Maintenant, /testpage/
va charger la page d'accueil, mais depuis que nous avons enregistré wpse_283104_redirect
, nous pouvons voir si nous sommes sur /testpage/
(ou quelle que soit l'adresse URL réécrite) avec [get_query_var()][2]
.
Donc, dans le hook template_redirect
, nous allons effectuer cette vérification et rediriger:
function wpse_283104_redirect() {
if ( get_query_var( 'wpse_283104_redirect' ) == '1' ) {
wp_redirect( 'http://example.com' );
exit;
}
}
add_action( 'template_redirect', 'wpse_283104_redirect' );