web-dev-qa-db-fra.com

Exclure une catégorie et ses sous-catégories à l'aide de WP_LIST_FILTER

Je dois exclure une catégorie et ses sous-catégories dans les publications. C'est le code sur lequel je travaille et ça marche:

        <?php
        $categories = wp_get_post_terms($post->ID, 'category');
        $categories = wp_list_filter($categories, array('slug'=>'regione'), 'NOT');
        $categories = wp_list_filter($categories, array('slug'=>'lazio'), 'NOT');
        $categories = wp_list_filter($categories, array('slug'=>'rm'), 'NOT');
        if (!empty($categories)) {
            ?>
            <ul class="category">
                <?php
                foreach ($categories as $category) {
                    $cat = get_category($category);
                    echo '<li><a href="' . get_category_link($category) . '">' . $cat->name . '</a></li>';
                }
                ?>
            </ul>

Bien que la catégorie 'regione' compte plus de 20 sous-chats et que chaque sous-chat ait entre 5 et 10 autres: une suggestion sur la manière d’exclure mieux la catégorie principale et ses enfants?

1
diana

Je réponds à une question au bout de six mois à peu près. Je m'attends donc à une qualité de réponse pas à la hauteur des normes WPSE. J'adorerais donc recevoir les commentaires d'autres gourous de l'expérience WPSE.

Ajoutez la fonction suivante à votre functions.php

function filter_category_list_by_slug( $slug, $categories ) {
    $excluded_parent = get_category_by_slug( $slug );
    $excluded_cats = get_categories( array( 'child_of' => $excluded_parent->term_id ) );
    $excluded_cats[] = $excluded_parent;
    $filtered = array();
    $matched = false;
    foreach ($categories as $category ) {
        $matched = false;
        foreach( $excluded_cats as $ex_cat ) {
            if ( $category->term_id == $ex_cat->term_id ) {
                $matched = true;
            }
        }
        if ( ! $matched ) {
            $filtered[] = $category;
        }
    }
    return $filtered;
}

Et le filtre la liste des catégories comme suit:

$categories = wp_get_post_terms($post->ID, 'category');
$categories = filter_category_list_by_slug( 'regione', $categories );
$categories = filter_category_list_by_slug( 'lazio', $categories );
$categories = filter_category_list_by_slug( 'rm', $categories );
1
Hameedullah Khan