add_rewrite_rule () vs $ wp_rewrite-> rules vs 'rewrite_rules_array'?
1 réponses
- votes
Tout d'abord,utilisez add_rewrite_rule()
plutôt que dejouer directement avec $wp_rewrite->rules
sipossible. Ce dernierest unpeubasniveau.
En ce qui concerne "l'urlne semettantpas àjour" - cen'estpas letravail des règles de réécriture. Ceux-cipointent simplement les URL vers leur contenu,maisilsne mettentpas àjour labarre d'adresse de l'utilisateur.
Lefichier quien est responsableest /wp-includes/canonical.php . Enparticulier lafonction redirect_canonical()
accrochée à template_redirect
.
Cette redirect_canonical()
a sonproprefiltre:
add_filter('redirect_canonical', 'wpse50912_redirect_canonical',10,2)
function wpse50912_redirect_canonical($redirect_url, $requested_url){
//Do stuff - determine if url is requesting album/track and check
//If it is, check it is using the new structure.
//Return the url you want in the address bar.
return $redirect_url;
}
First of all use add_rewrite_rule()
over messing directly with $wp_rewrite->rules
if possible. The latter is a bit low-level.
Regarding the 'url not updating' - this isn't the job of the rewrite rules. These simply point urls to their content, but they don't update the user's address bar.
The file that is responsible for this is /wp-includes/canonical.php. In particular the function redirect_canonical()
hooked onto template_redirect
.
This redirect_canonical()
has its own filter:
add_filter('redirect_canonical', 'wpse50912_redirect_canonical',10,2)
function wpse50912_redirect_canonical($redirect_url, $requested_url){
//Do stuff - determine if url is requesting album/track and check
//If it is, check it is using the new structure.
//Return the url you want in the address bar.
return $redirect_url;
}
J'ai rédigé des règles de réécriturepourmestypes d'articlespersonnalisés.ilsfonctionnentbien sauf que WPne metpas àjour l'url dans l'agent utilisateur lorsque redirect_urlne correspondpas à l'URL demandée.
tout le restefonctionnetrèsbien,y comprismesinfrastructurespersonnalisées ('post_type_link')et les options demodèlespersonnalisés ('single-template').
mes règles:
Jeme demandais quelles étaient les différencesentre l'utilisation de add_rewrite_rule (),l'ajout de règles directement aux règles $ wp_rewrite->et le raccordement à rewrite_rules_array? y a-t-il des différences? L'une des alternatives obligerait-elle WP àmettre àjour l'url dans l'agent utilisateur lorsque le lienpermanent de lapublication ciblée différait de l'url demandée?
unexemple de l'urlne semettantpas àjour ... l'albumet lespublications depiste sont liéspar unterme detaxonomiemutuelle. le crochet dans 'post_type_link'pour lespistestrouve l'album liéet insère son slug dans lepermalien. les règles de réécriture ci-dessusgarantissent que lesinfrastructuresnouvelleset traditionnellesfonctionnent,mais la demande de cette URL
/album/serenity/track--beetle-attack/
trouvera lemessagemaisne mettrapas àjour l'URLen/album--serenity/track--beetle-attack/
.Ilestpeuprobable que quiconque utilise lesinfrastructurestraditionnelles carje ne les annonceraipas oune les utiliseraipas surmon site,mais ce serait unplus de voir les URLmises àjour detoutefaçon dans l'agent utilisateur,sipossible.
/p>
bravo,
Grégory