web-dev-qa-db-fra.com

Hiérarchie des catégories dans l'URL

Les articles du site Web sur lequel je travaille actuellement ont plusieurs catégories hiérarchiques appliquées à chacune d’elles. Par exemple:

Source
- Books
-- Moby Dick
-- Sherlock Holmes

Les permaliens sont définis comme /%category%/%postname%/. Cependant, l'URL d'une publication n'inclut pas toutes les sous-catégories - tout ce que je reçois est site.com/source/books/*postname*, même si la publication en question N'A PAS été une catégorie dans Source, mais uniquement dans Books + Moby Dick.

Quelqu'un pourrait-il m'aider à comprendre comment ajuster ce comportement?

Je vous remercie.

2
zkvvoob

Le nom_de_propriété /%category%/%postname%/ comprendra les catégories et sous-catégories de l'URL du premier au premier enfant assigné . Donc, si vous voulez que l'URL soit site.com/source/books/moby-dick/*postname*, vous devez attribuer la publication uniquement à "Moby Dick". Attribuer le message uniquement à la catégorie "Moby Dick" affichera toujours le message sous les archives de la catégorie "source" et "livres" par défaut.

2
cybmeta

Ici, vous avez une solution complète, même si vous avez plusieurs catégories assignées à votre message:

function permalink_full_categories( $cat, $cats, $post ) {

    $ordering = array();
    foreach( $cats as $index => $this_cat) {
        $ordering[$this_cat->parent] = $index;
    }

    $ordered = array();
    $i = 0;

    while( $ordering[$i] !== null ){
        array_Push( $ordered, $cats[$ordering[$i]] );
        $i = $cats[$ordering[$i]]->term_id;
    }

    return end($cats);
}

add_filter( 'post_link_category', 'permalink_full_categories', 20, 3 );

Il filtre la catégorie permalien en modifiant son comportement par défaut, en renvoyant la dernière catégorie de la hiérarchie.

Par conséquent, le noyau Wordpress écrit l’URL de la catégorie de hiérarchie complète.

0