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?
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 );