web-dev-qa-db-fra.com

Comment utiliser le même slug de publication pour différentes catégories?

Je veux utiliser le même message slug pour différentes catégories. Parce que j'aurai différents projets avec le même slug. J'ai déjà le post slug email. Le second slug email devient email-2, mais ce n'est pas ce que je veux.

Par exemple, j'aurai différents projets pour le courrier électronique:

www.example.com/category-one/email
www.example.com/category-two/email
www.example.com/category-three/email
5
waisie li

Utilisation de la page parent-enfant (recommandé)

Si vous n'avez pas besoin de catégories et de publications, vous pouvez facilement y parvenir en utilisant des pages parent-enfant (et non des publications).

Par exemple, supposons que vous ayez trois pages comme:

www.example.com/category-one/
www.example.com/category-two/
www.example.com/category-three/

Vous pouvez maintenant avoir des pages enfants pour les pages ci-dessus avec slug email, par exemple.

www.example.com/category-one/email
www.example.com/category-two/email
www.example.com/category-three/email

Cela est possible car WordPress considère que la combinaison slug parent-enfant entière pour les pages (ou tout autre type de publication hiérarchique) est unique.

Bien sûr, toutes ces pages enfants avec email slug sont des pages différentes, avec juste le même slug d’URL de fin.

Utilisation de la combinaison catégorie-publication

Avertissement: Par défaut, WordPress ne le supporte pas pour une bonne raison. Peut-être avez-vous maintenant /%category%/%postname%/ comme structure permalien actuelle, mais que faire si elle doit être modifiée à l'avenir? Ensuite, vous aurez des conflits.

De plus, comme WordPress ne prend pas cela en charge en interne, vous pouvez avoir des problèmes imprévus avec d'autres plugins (par exemple, des plugins personnalisés à permalien, des plugins SEO, etc.).

Ceci est possible en utilisant le hook wp_unique_post_slug filter. Par exemple, l'exemple de plug-in suivant autorisera plusieurs occurrences du slug email:

<?php
/*
Plugin Name:  WPSE non-unique post slug
Plugin URI:   https://wordpress.stackexchange.com/a/313422/110572
Description:  WPSE non-unique post slug
Version:      1.0.0
Author:       Fayaz Ahmed
Author URI:   https://www.fayazmiraz.com/
*/

add_filter( 'wp_unique_post_slug', 'wpse313422_non_unique_post_slug', 10, 6 );

function wpse313422_non_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
    if( $post_type === 'post' && $original_slug === 'email' ) {
        // Perform category conflict, permalink structure
        //     and other necessary checks.
        // Don't just use it as it is.
        return $original_slug;
    }

    return $slug;
}
3
Fayaz