J'ai créé une catégorie avec le slug service
, qui a le permalien: https://example.com/service
.
et une page avec le lien: https://example.com/service
.
Dans la catégorie service
, il y a un article avec le lien comme: https://example.com/service/post1
Maintenant, le lien https://example.com/service
est redirigé vers l'archive des catégories, mais je veux qu'il charge la page à la place.
Comment puis je faire ça?
Page
quand un Page
et une archive Category
ont la même URL:C'est le comportement par défaut de WordPress : Lorsque vous avez la même URL pour une archive de catégorie et pour une page , WordPress chargera la page au lieu de l’archive des catégories.
Ainsi, à moins qu'un plug-in modifie ce comportement pour votre configuration WordPress, votre URL en double doit charger la page, pas l'archive des catégories.
La structure d'URL que vous vouliez a besoin de travail. Donc, à moins que vous ne l'ayez déjà fait, suivez les instructions ci-dessous pour obtenir ladite structure d'URL:
# URL structure for Pages:
https://example.com/page-slug
Cela se produit par défaut, vous n'avez rien à faire.
# URL structure for Categories
https://example.com/category-slug
Pour ça:
WordPress Admin Panel Menu
→ Settings
..
) dans le champ de texte Category base
.# URL structure for Posts
https://example.com/category-slug/post-slug
Pour ça:
WordPress Admin Panel Menu
→ Settings
.Custom Structure
et entrez /%category%/%postname%/
dans le champ de texte Custom Structure
.Si, pour une raison quelconque, vous n'obtenez pas le résultat attendu, utilisez cette structure d'URL dans une installation WordPress avec:
- WordPress Core mis à jour à la dernière version.
- Aucun plugin n'est activé
- Un thème par défaut tel que Twentyseventeen est activé
et voyez ensuite ce qui se passe avec les URL de page et de catégorie en double.
Si vous cochez cette case , vous verrez que ce type de structure d'URL posera un problème de pagination dans les pages d'archives de votre catégorie. Cela est dû au fait que WordPress confond avec la partie /page/2
sous une page ou une publication différente.
Par exemple: supposons que vous ayez une catégorie nommée service
et service
catégorie contenant des publications telles que web development
, hosting
etc. avec l'URL suivante:
https://example.com/service
https://example.com/service/web-development
https://example.com/service/hosting
Vous pouvez maintenant avoir plusieurs pages dans votre page argumentative de la catégorie service
, comme:
https://example.com/service
https://example.com/service/page/2
https://example.com/service/page/3
En raison de cette structure d'URL, WordPress pense que vous essayez de charger une publication contenant le slug post
dans la catégorie service
et que cette publication est un poste paginé .
Ainsi, au lieu de charger les pages suivantes de votre archive de catégorie service
, WordPress essaiera de charger un message paginé avec le slug page
et vous obtiendrez une erreur 404
(page non trouvée).
Pour résoudre ce problème, vous pouvez utiliser un plugin simple avec le code suivant:
<?php
/*
Plugin Name: Category Pagination Fix
Plugin URI: https://wordpress.stackexchange.com/a/308826/110572
Description: Fix category pagination for possible conflicts with page or post url
Version: 1.0.0
Author: Fayaz Ahmed
Author URI: https://www.fayazmiraz.com/
*/
function wpse308326_fix_category_pagination( $query_string = array() )
{
if( isset( $query_string['category_name'] )
&& isset( $query_string['name'] ) && $query_string['name'] == 'page'
&& isset( $query_string['page'] ) ) {
$paged = trim( $query_string['page'], '/' );
if( is_numeric( $paged ) ) {
// we are not allowing 'page' as a page or post slug
unset( $query_string['name'] );
unset( $query_string['page'] ) ;
// for a category archive, proper pagination query string is 'paged'
$query_string['paged'] = ( int ) $paged;
}
}
return $query_string;
}
add_filter( 'request', 'wpse308326_fix_category_pagination' );