web-dev-qa-db-fra.com

Faire que le post slug soit prioritaire sur le slug

J'ai un site wordpress où la base de la catégorie est retirée de l'URL.

Maintenant, quand une catégorie a un certain slug qui est similaire à un post slug, la catégorie est affichée.

Je voudrais montrer le post à la place. Est-ce possible?

Merci!

4
bertkat

Il n'y a pas de moyen propre de faire ce que vous demandez. Ce que vous voulez, c'est que WordPress vérifie si, pour une URL donnée, il y a une publication avec ce slug, et sinon, essayez de trouver une catégorie avec ce slug. À l'exception des pages, WordPress ne vérifie pas si un opject (post, terme) existe avant de "commettre" une règle de réécriture correspondante. Par conséquent, lorsque vous avez des règles de réécriture en conflit, la seconde ne sera jamais lue.

La meilleure solution consiste à trouver une structure de réécriture différente pour vos publications ou catégories. Les préfixes sont idéaux, comme /blog/%postname%/, /articles/%postname%/ pour les publications ou /category/%category%/, /topic/%category%/ pour les catégories.

Cela dit, il n’est pas impossible de faire ce que vous demandez, ce n’est tout simplement pas optimal. Ce que vous devez faire, c'est intercepter la request et vérifier si la publication existe. Sinon, modifiez les vars de requête. Notez que cela ajoute à la charge de page de chaque publication. Par conséquent, comparez les coûts et les avantages. N'oubliez pas non plus que si une publication et une catégorie partagent le même nom, l'accès à la catégorie est impossible. Sans plus tarder,

function wpse_75604_check_rewrite_conflicts( $qv ) {
    if ( isset( $qv['name'] ) ) {
        if ( ! get_page_by_path( $qv['name'], OBJECT, 'post' ) ) {
            $qv['category_name'] = $qv['name'];
            unset( $qv['name'] );
        }
    }
    return $qv;
}
add_filter( 'request', 'wpse_75604_check_rewrite_conflicts' );
0
Matthew Boynes

Je pense que vous pouvez utiliser la réponse à cette question en remplaçant le filtre page_rewrite_rules par le filtre post_rewrite_rules, afin que les règles de post-récriture aient la priorité la plus élevée.

1
Parham