web-dev-qa-db-fra.com

Dupliquer la catégorie et l'URL de la page charge la catégorie au lieu de la page

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?

2
Thien Sư

Chargez 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.

Pour obtenir la structure d'URL appropriée:

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:

  1. Allez à: WordPress Admin Panel MenuSettings.
  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 MenuSettings.
  2. Sélectionnez Custom Structure et entrez /%category%/%postname%/ dans le champ de texte Custom Structure.
  3. Cliquez sur Save Changes bouton.

Si, pour une raison quelconque, vous n'obtenez pas le résultat attendu, utilisez cette structure d'URL dans une installation WordPress avec:

  1. WordPress Core mis à jour à la dernière version.
  2. Aucun plugin n'est activé
  3. 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.

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

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