web-dev-qa-db-fra.com

Comment préfixez-vous les URL de publication de blog telles que mysite.com/blog/%postname%/, tout en permettant aux auteurs de rester sur mysite.com/authors/%nicename%?

J'ai essayé beaucoup de choses, mais je ne trouve pas de solution qui fonctionne.

Je veux que mon site ait la structure:

mysite.com/ = homepage
mysite.com/blogs/ = blog archive
mysite.com/blogs/year/ = blog archive (in a specific year)
mysite.com/blogs/year/month/ = blog archive (in a specific month)
mysite.com/blogs/year/month/postname = blog post
mysite.com/authors/ = authors archive
mysite.com/authors/nicename = author profile
mysite.com/customposttype/ = custom post type archive
mysite.com/customposttype/postname = custom post type post

Actuellement, avec /blogs/%year%/%month%/%postname%/ défini comme structure permalien, tout fonctionne correctement à l'exception de la partie auteurs. Il le force à mysite.com/blogs/authors/ et mysite.com/blogs/authors/nicename, ce qui n’est pas souhaitable, car la plupart des auteurs créeront des types de publication personnalisés et non des blogs.

Quelques articles que j'ai vérifiés ici mais sans la bonne réponse:

Comment préfixer correctement les URL de publication de blog

Question Permaliens: Ajouter un préfixe UNIQUEMENT devant les messages

Possibilité de modifier l'URL du type de publication régulière sans affecter l'URL d'autres types de publication personnalisés?

1
ZachM

Vous pouvez définir la base d'auteurs indépendamment en manipulant le $wp_rewrite global:

function wpa55976_author_base() {
    global $wp_rewrite;
    $wp_rewrite->author_base = 'authors';
    $wp_rewrite->author_structure = '/' . $wp_rewrite->author_base . '/%author%';

    // EDIT - rewrite rule to force author urls to resolve:
    add_rewrite_rule('authors/([^/]+)/?$', 'index.php?author_name=$matches[1]', 'top');

}
add_action( 'init', 'wpa55976_author_base' );

Assurez-vous de visiter votre page de permaliens pour vider les réécritures après avoir ajouté ceci.

La seule chose que vous n'obtiendrez pas est mysite.com/authors/ = authors archive, car WordPress ne fournit pas cette page par défaut, bien que vous puissiez éventuellement créer une page authors et utiliser un modèle personnalisé ou ajouter une règle de réécriture pour la gérer.

4
Milo