Par exemple, j'ai une catégorie /wiki/
https://buhehe.de/wiki/
Il a supprimé le terme "catégorie" de l'URL, mais veuillez consulter: https://buhehe.de/wiki/page/2
Il ne montre pas la deuxième page de catégorie, mais il a en fait une deuxième page.
Où est le problème?
Supposons que vous ayez une catégorie nommée wiki
name__.
Maintenant, quand vous avez une URL de catégorie comme: https://example.com/wiki
(au lieu de https://example.com/category/wiki
) et dites une page ou une URL de publication comme:
https://example.com/a-page
or
https://example.com/category-slug/a-post
WordPress n'a vraiment aucun moyen de savoir si https://example.com/wiki/page/2
est la deuxième page d'une autre page/post, ou la deuxième page d'une archive de catégorie (parce que wiki
peut très bien être un slug de page ou page
être un slug de poste sous la catégorie wiki
name__).
Cela est dû au fait que WordPress confond avec la partie /page/2
en tant que partie différente page ou message paginé en plusieurs parties .
Ainsi, au lieu de charger les pages suivantes de votre archive de catégorie wiki
name__, WordPress essaiera de charger un message paginé avec le slug page
et vous obtiendrez une erreur 404
(page non trouvée) au lieu d'obtenir la deuxième page de l'archive de catégories.
Avant de vous donner la solution à ce problème, assurez-vous d’abord que le permalien est correct.
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 Categories
https://example.com/category-slug
Pour ça:
WordPress Admin Panel Menu
→ Settings
name__..
) 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
name__.Custom Structure
et entrez /%category%/%postname%/
dans le champ de texte Custom Structure
.Certains plugins SEO ont une solution à ce problème. Cependant, comme il s’agit d’un problème fondamental de structure d’URL de votre site, il est préférable de ne pas dépendre des plugins SEO pour cela. Dites, que faire si vous voulez changer le plugin SEO à l'avenir et que l'autre plugin a de meilleures options mais ne fournit pas de solution pour cela?
Il est donc préférable d’utiliser un simple plugin qui ne résout que ce problème. Vous pouvez utiliser le CODE suivant et l'enregistrer dans votre répertoire de plug-in avec le nom de fichier category-pagination-fix.php
, puis activer le plug-in nommé Category Pagination Fix
à partir du panneau d'administration du site:
<?php
/*
Plugin Name: Category Pagination Fix
Plugin URI: https://wordpress.stackexchange.com/a/311858/110572
Description: Fix category pagination
Version: 1.0.0
Author: Fayaz Ahmed
Author URI: https://www.fayazmiraz.com/
*/
function wpse311858_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', 'wpse311858_fix_category_pagination' );
La solution ci-dessus fonctionne parfaitement avec la pagination lorsque vous avez une catégorie d'URL comme:
https://example.com/category-slug/
et postez l'URL comme:
https://example.com/category-slug/post-slug
Cependant, lorsque vous avez une URL de sous-catégorie comme:
https://example.com/category-slug/sub-category-slug
ou, quand vous avez post URL comme:
https://example.com/post-slug
la solution simple ci-dessus ne fonctionne pas.
Dans ce genre de cas, vous pouvez utiliser un plugin tel que Remove Category URL .
Ces types de plug-in apportent des modifications fondamentales à la réécriture d'URL. C'est pourquoi certains comportements par défaut de WordPress risquent de ne pas fonctionner correctement après l'utilisation de l'un de ces plug-ins. Donc, utilisez la solution qui vous convient le mieux, mais assurez-vous que vous n'essayez pas de faire la même chose dans plusieurs plugins différents .
Attention: Utilisation de ce type d'URL d'archive sans tête (par exemple, pas de
category
ou terme similaire pour des liens de page de catégorie, nitag
ou terme similaire pour des liens de page de balises, etc. .) crée des conflits internes avec les URL de page et de post. Le moteur WordPress a besoin de nombreuses vérifications internes pour déterminer lequel charger et lequel ne pas charger. Ce processus est gourmand en ressources. Donc, si votre site contient des milliers de pages, publications, catégories, balises, etc., il est préférable d’utiliser ces termes dans l’URL.
Vous pouvez utiliser un plugin SEO tel que Yoast qui a une option remove categories , ou vous pouvez programmer la fonction vous-même, comme expliqué dans certains des liens ci-dessous.
Quelques articles connexes qui pourraient vous aider:
Comment supprimer une catégorie de l'URL wordpress
Supprimer la catégorie et la base de balises de l'URL WordPress - sans plugin
Voici ma solution.
Cela fonctionne page paginé aussi dans mon cas.
S'il vous plaît essayer et laissez-moi savoir si cela fonctionne.
// Remove category from URL
add_filter('user_trailingslashit', 'wpse311858_remove_category_from_url');
function wpse311858_remove_category_from_url($link) {
return str_replace("/category/", "/", $link);
}
// Add new category URLs
add_filter('generate_rewrite_rules', 'wpse311858_category_rewrite');
function wpse311858_category_rewrite($wp_rewrite) {
$new_rules = [];
// Get all the categories including empty categories
$cats = get_categories(['exclude' => 1, 'hide_empty' => false ]); //exclude uncategorized catagory if there were
// Loop through each category to add new rules to core rewrite pattern
foreach( $cats as $cat ) {
$cat_nicename = $cat->slug;
// Check if it is parent or child category
if( $cat->parent !== 0 ) {
$cat_nicename = get_category_parents( $cat->parent, false, '/', true ) . $cat_nicename;
}
// For each pattern
$new_rules['(' . $cat_nicename . ')/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; // for feed pattern
$new_rules['(' . $cat_nicename . ')/(.+?)/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; // for another feed pattern
$new_rules['(' . $cat_nicename . ')/(.+?)/embed/?$'] = 'index.php?category_name=$matches[1]&embed=true'; // for embed page
$new_rules['(' . $cat_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]'; // for paged page
$new_rules['(' . $cat_nicename . ')/?$'] = 'index.php?category_name=$matches[1]'; // for category archive page
} //endforeach
// Finally add new rules
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}