web-dev-qa-db-fra.com

Comment supprimer le terme "catégorie" de la pagination des catégories?

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?

6
Interessante Fakten

Pourquoi le problème de pagination survient-il?

Supposons que vous ayez une catégorie nommée wikiname__.

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 wikipeut très bien être un slug de page ou pageêtre un slug de poste sous la catégorie wikiname__).

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 wikiname__, WordPress essaiera de charger un message paginé avec le slug pageet 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.

Pour obtenir la structure d'URL de catégorie nécessaire:

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:

  1. Allez à: WordPress Admin Panel MenuSettingsname__.
  2. Placez un seul point (.) dans le champ de texte Category base.
  3. Cliquez sur Save Changes bouton.

# URL structure for Posts
https://example.com/category-slug/post-slug

Pour ça:

  1. Allez à: WordPress Admin Panel MenuSettingsname__.
  2. Sélectionnez Custom Structure et entrez /%category%/%postname%/ dans le champ de texte Custom Structure.
  3. Cliquez sur Save Changes bouton.

Résoudre le problème de pagination de catégorie:

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' );

Solution alternative:

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 categoryou terme similaire pour des liens de page de catégorie, ni tagou 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.

4
Fayaz

Yoast Plugin - Supprimer des catégories

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

2
Cryptomanic

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;
}
0
norixxx