J'ai écrit les règles de réécriture pour mes types d'articles personnalisés. ils fonctionnent bien, sauf que WP ne met pas à jour l'URL de l'agent d'utilisateur lorsque le paramètre redirect_url ne correspond pas à request_url.
tout le reste fonctionne très bien, y compris mes permavancements personnalisés ('post_type_link') et les options de modèles personnalisés ('modèle unique').
mes règles:
// custom URL rewrite for Album posts
add_action( 'init', 'gregory_rewrite_album_link' );
function gregory_rewrite_album_link()
{
// album--%album_slug%/ OR album/%album_slug%/
// preferred permastruct: album--%album_slug%/
add_rewrite_rule(
'^album(/|--)([^/]+)/?$',
'index.php?post_type=gregory-cpt-album&name=$matches[2]',
'top' );
}
// custom URL rewrite for Track posts
add_action( 'init', 'gregory_rewrite_track_link' );
function gregory_rewrite_track_link()
{
// accepts and rewrites the following permutations:
// where album would be: album--%album_slug% OR album/%album_slug%
// where track would be: track--%track_slug% OR track/%track_slug%
// preferred permastruct: album--%album_slug%/track--%track_slug%/
add_rewrite_rule(
'^(album(/|--)[^/]+/)?track(/|--)([^/]+)/?$',
'index.php?post_type=gregory-cpt-track&name=$matches[4]',
'top' );
}
Je me demandais quelles étaient les différences entre l'utilisation de add_rewrite_rule (), l'ajout direct de règles à $ wp_rewrite-> rules 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 d'utilisateur lorsque le permalien de la publication ciblée diffère de l'URL demandée?
un exemple d'URL non mise à jour ... L'album et les posts de piste sont liés par un terme de taxonomie commun. le crochet dans 'post_type_link' pour les pistes trouve l'album lié et insère son slug dans le permalien. les règles de réécriture ci-dessus garantissent que les permastructs nouveaux et traditionnels fonctionnent, mais demander cette URL /album/serenity/track--beetle-attack/
trouvera la publication mais ne mettra pas à jour l'URL à /album--serenity/track--beetle-attack/
.
il est peu probable que quiconque utilise les permastructs traditionnels, car je ne les publierai pas sur mon site, mais ce serait un plus pour Nice de voir les URL mises à jour de toute façon dans l'agent utilisateur, si possible.
à votre santé,
Gregory
Tout d’abord, utilisez add_rewrite_rule()
pour déconner directement avec $wp_rewrite->rules
si possible. Ce dernier est un peu bas.
En ce qui concerne "l'URL ne met pas à jour" - ce n'est pas le travail des règles de réécriture. Ces URL pointent simplement vers leur contenu, mais elles ne mettent pas à jour la barre d'adresse de l'utilisateur.
Le fichier responsable est /wp-includes/canonical.php . En particulier, la fonction redirect_canonical()
est liée à template_redirect
.
Cette redirect_canonical()
a son propre filtre:
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;
}