web-dev-qa-db-fra.com

Lien permanent avec sous-sous-catégorie et nom de poste

En travaillant sur un nouveau projet de thème, j'ai créé un type d'article personnalisé appelé produits avec sa propre taxonomie. Je veux que la structure de l'URL soit:

http://example.com/products/main_category/subcategory1/subcategory2/postname/

J'ai trouvé cette solution ici:

function filter_post_type_link($link, $post)
    {
        if ($post->post_type == 'products')
            return $link;

        if ($cats = get_the_terms($post->ID, 'product_categories'))
            $link = str_replace('%product_categories%', array_pop($cats)->slug, $link);
        return $link;
    }
    add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Avec cette solution, j'ai pu créer cette structure:

http://example.com/products/category/postname/

Donc, les sous-catégories ne seront toujours pas affichées dans l'URL ...

L’autre problème est que lorsque je règle la taxonomie hierarchical => true, l’URL ressemble à ceci lorsque je parcours les catégories de produits:

 http://example.com/products/category1/subcategory1-category1/subcategory2-subcategory1-category1/

et aussi lorsque hierarchical => true est présent, le code mentionné ci-dessus cesse de fonctionner.

Donc, ce que je veux réaliser avec les URL de produit est essentiellement ceci: Si le produit appartient à la catégorie principale:

 http://example.com/products/main_category/postname/

Si le produit appartient à la sous-catégorie 1:

 http://example.com/products/main_category/subcategory1/postname/

Si le produit appartient à la sous-catégorie 2:

 http://example.com/products/main_category/subcategory1/subcategory2/postname/

Bien sûr, si je supprime le nom de poste des URL ci-dessus, wp devrait indiquer la catégorie appropriée. Ce serait une structure hiérarchique de Nice.

Connaissez-vous des solutions pour y arriver?

Meilleurs voeux, Matt

6
Mate Kaszas

Débarrassez-vous du filtre que vous avez. Assurez-vous que vous utilisez 'rewrite' => array( 'hierarchical' => 'true' ) dans votre fonction register_taxonomy(). N'oubliez pas de vider les règles de réécriture. Voir cette page pour plus d'infos: Codex

2
Nathan Powell