Répertoriez uniquement les catégories contenant des publications d'un type de publication personnalisé spécifique.

4

J'ai trois types de publication personnalisés configurés: articles , videos et photos .
J'utilise des catégories standard pour ces types d'articles et je les partage entre tous les types d'articles.

J'essaie de créer un menu de navigation pour chaque type d'article, listant les catégories, qui devrait suivre la structure suivante:

  • Photos

    • Cat 1
    • Cat 3
    • Cat 5
  • Vidéos

    • Cat 2
    • Cat 3
    • Cat 5
  • Articles

    • Cat 1
    • Cat 2
    • Cat 4

Les catégories qui ne contiennent pas le type de publication personnalisé doivent être masquées.

get_categories() avec hide_empty défini sur 1 est évidemment proche, mais cela ne vous permet pas de spécifier un type de publication.

    
posée kdev 19.04.2013 - 14:44

2 réponses

6

Mettez les éléments suivants dans votre functions.php :

function wp_list_categories_for_post_type($post_type, $args = '') {
    $exclude = array();

    // Check ALL categories for posts of given post type
    foreach (get_categories() as $category) {
        $posts = get_posts(array('post_type' => $post_type, 'category' => $category->cat_ID));

        // If no posts found, ...
        if (empty($posts))
            // ...add category to exclude list
            $exclude[] = $category->cat_ID;
    }

    // Set up args
    if (! empty($exclude)) {
        $args .= ('' === $args) ? '' : '&';
        $args .= 'exclude='.implode(',', $exclude);
    }

    // List categories
    wp_list_categories($args);
}

Vous pouvez maintenant appeler wp_list_categories_for_post_type('photos'); ou wp_list_categories_for_post_type('videos', 'order=DESC&title_li=Cats'); et autres.

    
réponse donnée tfrommen 19.04.2013 - 15:34
0

fonction pour la catégorie par la poste. copier dans function.php

function get_categories_by_post_type($post_type, $args = '') {
    $exclude = array();
    //check all categories and exclude
    foreach (get_categories($args) as $category) {
        $posts = get_posts(array('post_type' => $post_type, 'category' => $category->cat_ID));
        if (empty($posts)) { $exclude[] = $category->cat_ID; }
    }
    //re-evaluate args
    if (!empty($exclude)) {
        if(is_string($args)) {
            $args .= ('' === $args) ? '' : '&';
            $args .= 'exclude='.implode(',', $exclude);
        } else {
            $args['exclude'] = $exclude;
        }
    }
    return get_categories($args);
}
    
réponse donnée technomav 04.11.2017 - 08:26

Lire d'autres questions sur les étiquettes