L'inclusion de la base de catégories dans un post permalien donne 404
4 réponses
- votes
-
- 2012-09-15
Je suis revenu sur ceproblème récemmentet j'aienfin trouvé la solution! Celapeut ounonfonctionnerpour vous -il y a deux caspossibles:
-
Si certains articles de votre site sontplacés sous des catégoriesparenteset d'autres - dans des sous-catégories (catégoriesenfants),ou si les catégories ont desniveaux d'imbrication différents (certaines catégoriesparentesn'ont que des sous-catégoriestandis que d'autres - des sous-sous-catégories),alors iln'y apas de solution . Ilestimpossible de distinguer
news/category/post-name/
denews/category/subcategory/
avec regex dans les règles de réécriture. -
Si vous avezfixé unniveau d'imbricationpourtoutes les catégorieset publiez uniquement dans les sous-catégories de dernierniveau,alors vous avez de la chance! Ilexiste une solution assez simple :
La raison de ces 404pages avec
news
à lafois dans labase de catégorieet la structure depermalienpersonnaliséeest que la règle de réécritureinterne debase de catégorie a lapriorité sur les règles de structure depermalien. Doncnews/category/subcategory/postname/
estinterprété commeindex.php?category_name=category/subcategory/postname
et,évidemment,WordPressne peutpastrouver unetelle catégorie,retournant 404page.Ce que vous devezfaireest d'ajouter unenouvelle règle de réécritureen haut de la liste des règles. Placez ce code dans votre
functions.php
oupartout où vous lejugez approprié:add_action( 'init', 'wpa58471_category_base' ); function wpa58471_category_base() { // Remember to flush the rules once manually after you added this code! add_rewrite_rule( // The regex to match the incoming URL 'news/([^/]+)/([^/]+)/([^/]+)(/[0-9]+)?/?$', // The resulting internal URL 'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]', // Add the rule to the top of the rewrite list 'top' ); }
puismettez àjour la structure dupermalien àpartir de votrepage d'optionsgénérales WordPress. Le code ci-dessusestpour l'imbrication à deuxniveaux,si vous avez une structure de catégoriesplus oumoinsimbriquée,modifiez l'expression régulièreet l'URL résultanteen conséquence.
P.S.merci aux contributeurs de ces réponses utiles: aide avec add_rewrite_rule et outilpour analyser les règles de réécriture .
I returned to this problem recently and I've found the solution finally! It may or may not work for you - there are two possible cases:
If some posts on your site are placed under parent categories and some - in subcategories (child categories), or the categories have different nesting levels (some parent categories have only subcategories while others - sub-subcategories), then there is no solution. It's impossible to distinguish
news/category/post-name/
fromnews/category/subcategory/
with regex in rewrite rules.If you have fixed nesting level for all categories and post only in the last-level subcategories, then you are in luck! There is quite simple solution:
The reason of those 404 pages with
news
both in category base and custom permalink structure is that the category base internal rewrite rule takes the precedence over the permalink structure rules. Sonews/category/subcategory/postname/
is interpreted asindex.php?category_name=category/subcategory/postname
and, obviously, WordPress can't find such category, returning 404 page.What you need to do is to add new rewrite rule on top of the rules list. Place this code in your
functions.php
or wherever you think it's appropriate:add_action( 'init', 'wpa58471_category_base' ); function wpa58471_category_base() { // Remember to flush the rules once manually after you added this code! add_rewrite_rule( // The regex to match the incoming URL 'news/([^/]+)/([^/]+)/([^/]+)(/[0-9]+)?/?$', // The resulting internal URL 'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]', // Add the rule to the top of the rewrite list 'top' ); }
and then update permalink structure from your WordPress General Options page. The code above is for two-level nesting, if you have more or less nested category structure, then edit the regex and resulting URL accordingly.
P.S. thanks to contributors of these useful answers: help with add_rewrite_rule and tool to analyze rewrite rules.
-
Bien qu'iln'y aitpas de solution utilisant les regex dans les règles de réécriture,ilexistetoujours unmoyen d'avoir cettefonctionnalité: http://wordpress.stackexchange.com/questions/98083/how-can-you-load-the-categories-page-from-un-crochet/98095 # 98095While there is no solution using regex in rewrite rules, there still is a way to have this functionality: http://wordpress.stackexchange.com/questions/98083/how-can-you-load-the-categories-page-from-a-hook/98095#98095
- 2
- 2013-05-02
- Jeremy
-
- 2017-05-29
Il vous suffit d'ajouter "/".après labase de la catégorie:
Base de la catégorie:
news/.
(/.est requis carilempêche les 404pour lapublication).Cela aparfaitementfonctionnépourmoi :)
MODIFIER: Ce champ supprimera lesbarres obliques defin ou de début àmoins que vousn'incluiez le "."
You only need to add "/." after category base:
Category base:
news/.
(/. is required as it prevents 404s for post).This worked perfectly for me :)
EDIT: This field will strip trailing or leading slashes unless you include the "."
-
- 2012-08-22
Structure depermalienpersonnalisée:
/media/%category%/%postname%/
Base de la catégorie:.
Atravaillépourmoi,WordPress 3.4.1,sans aucunplug-in associé.
Mise àjour: Ehbien,plustard,j'ai remarqué que
wp_list_categories
génère des liens sans "média" dans l'URL.Mais lespublications sont accessibles avec la structure d'URL souhaitéeet les archives de catégories sont aubonendroit. Je cherchemaintenant à changer le comportement de wp_list_categories.Custom permalink structure:
/media/%category%/%postname%/
Category base:.
Worked for me, WordPress 3.4.1, without any related plugins.
Update: Well, later I've noticed that
wp_list_categories
outputs links without "media" in the URL. But posts are accessible with the desired URL structure, and categories archives is in the right place. Now I'm looking into changing wp_list_categories behavior.-
Mercipour la réponse,maisil y a 2problèmes:je nepeuxpas accéder aux archives de catégories (à lafois avec `media`et sans,en utilisant lamême version 3.4.1),et les liens réellementgénérés contiennent`/./`dans leurs adresses.Thanks for the reply, but there are 2 problems: I can't access categories archives (both with `media` and without, using the same version 3.4.1), and actual generated links contain `/./` in their addresses.
- 0
- 2012-08-23
- semyonfilippov
-
C'est étrange.Je suppose qu'il y apeut-être 2 raisons: 1. Certains de vospluginsprennent deseffets secondaires. 2. Ma configurationinitiale de WordPressest quelquepeu différente.J'utilise http://qwordpress.ru/avec unemise àniveauimmédiate vers la version actuelle de WP.Et dans ce cas,lapremière chose sur laquelleje travaillaisest la structure des catégorieset les URL,donc la configuration était assezpure.That's strange. I guess there maybe 2 reasons: 1. Some of your plugins takes side effects. 2. My WordPress initial setup is somehow different. I'm using http://qwordpress.ru/ with immediate upgrade to current WP version. And in that case the first thing I was working on is the categories structure and URLs, so setup was quite pure.
- 0
- 2012-08-24
- Lev Eidinov
-
- 2015-01-19
Jeferaismieux depublier un commentaire,maisje nepeuxpaspour lemoment.Votre codefonctionneparfaitement,mais si vousne voulezpas casser lesflux RSSpar catégorie,cela devrait ressembler à ceci:
add_action( 'init', 'wpa58471_category_base' ); function wpa58471_category_base() { // Remember to flush the rules once manually after you added this code! add_rewrite_rule( // The regex to match the incoming URL 'news/([^/]+)/([^/]+)/([^/][^f][^e][^e][^d]+)(/[0-9]+)?/?$', //here my changes to exclude 'feed' // The resulting internal URL 'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]', // Add the rule to the top of the rewrite list 'top' ); }
Quoi qu'ilen soit,mercipour cetexcellentexemple de code.:)
I'd better post a comment, but I cannot for now. Your code works perfectly, but if you do not want to break the per category RSS feeds it should look like this:
add_action( 'init', 'wpa58471_category_base' ); function wpa58471_category_base() { // Remember to flush the rules once manually after you added this code! add_rewrite_rule( // The regex to match the incoming URL 'news/([^/]+)/([^/]+)/([^/][^f][^e][^e][^d]+)(/[0-9]+)?/?$', //here my changes to exclude 'feed' // The resulting internal URL 'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]', // Add the rule to the top of the rewrite list 'top' ); }
Anyways, thanks for a great code sample. :)
J'ai unepage d'accueil statiqueet unepage distincte
/news/
commepage demessages. J'aimerais avoir les URL àpublication unique comme celle-ci:et pour les archives de catégories:
Ce quej'ai déjàessayé:
Sij'ajoute
news
commebase dema catégorieet/news/%category%/%postname%/
comme structure depermalienpersonnalisée,j'obtiens la structure souhaitée URLmais aussierreur 404 pour les articles uniques (à lafois avecnews/
dans l'URLet sanselle). Toutes les autrespages (parex. Archives de catégories,pages,etc.) sont accessibles.Sije laisse labase de la catégorie videet lespermaliens sous laforme
/news/%category%/%postname%/
,iln'y a aucuneerreur 404 ,mais catégorie Les URL contiennenten outre le slugcategory
par défaut,comme ceci:www.example.com/news/category/categoryname/
Sij'utilise desplug-inspour supprimer labase de catégoriepar défaut ou sij'installe simplement labase de catégorie sur
.
elleest supprimée avec lapartienews
Sije définis lespermaliens comme
/%category%/%postname%/
et quej'ajoute uniquement labase de la catégorienews
,iln'y apasnonplus de 404 erreurs,mais les liens vers les articlesne commencentpasparnews
:www.example.com/categoryname/subcategory/postname/
Il y a des questions similaires sans réponse: Lesmessagesne s'affichentpas avec labase de catégorieset les sous-catégoriespersonnalisées et tweeks depermaliens wordpress