web-dev-qa-db-fra.com

Mettez en surbrillance la catégorie actuelle dans wp_list_categories

J'utilise wp_list_categories pour afficher tous les termes de ma taxonomie personnalisée 'categories'.

La fonction affiche tous mes termes avec succès, mais la catégorie actuelle n'est pas mise en surbrillance, même si 'current_category' est défini sur 1 dans mes arguments.

La fonction est générée sur taxonomy-categories.php, conformément à la convention de nommage de ma taxonomie categories.

Ce n'est pas dans une boucle, pourrait-il en être ainsi?

UPDATE, voici ma fonction:

$args = array(
    'orderby'               => 'term_group',
    'title_li'              =>  NULL,
    'order'                 => 'ASC',
    'hide_empty'            => 1,
    'use_desc_for_title'    => 0,
    'feed'                  => '',
    'hierarchical'          => 1,
    'echo'                  => 1,
    'current_category'      => 1,
    'taxonomy'              => 'categories'
);
echo wp_list_categories($args);

Remarque: cela fonctionne sur mon modèle single-{post-type}.php, mais ne fonctionne pas sur mon modèle taxonomy-{taxonomy}.php.

1
Eoghan OLoughlin

Cela ajoutera une classe current-cat à toutes/toutes les catégories connectées à la publication, pas une seule.

Ajoutez ceci à functions.php

function tax_cat_active( $output, $args ) {

  if(is_single()){
    global $post;

    $terms = get_the_terms( $post->ID, $args['taxonomy'] );
    foreach( $terms as $term )
        if ( preg_match( '#cat-item-' . $term ->term_id . '#', $output ) )
            $output = str_replace('cat-item-'.$term ->term_id, 'cat-item-'.$term ->term_id . ' current-cat', $output);
  }

  return $output;
}
add_filter( 'wp_list_categories', 'tax_cat_active', 10, 2 );
0
Howdy_McGee

La réponse fournie par Howdy_McGee a généré pour moi un avis PHP qui l'empêchait de fonctionner correctement. J'ai changé $terms = get_the_terms( $post->ID, $args['taxonomy'] ); en $terms = get_the_terms( $post->ID, 'taxonomy' );. J'ai également ajouté une vérification indiquant que la publication comporte des termes associés pour supprimer des avertissements supplémentaires PHP si $terms est vide.

function tax_cat_active($output, $args) {
    if (is_single()) {
        global $post;
        $terms = get_the_terms($post->ID, 'category');
        if (!empty($terms)) {
            foreach( $terms as $term )
                if ( preg_match( '#cat-item-' . $term ->term_id . '#', $output ) )
                    $output = str_replace('cat-item-'.$term ->term_id, 'cat-item-'.$term ->term_id . ' current-cat', $output);
        }
    }
    return $output;
}
add_filter('wp_list_categories', 'tax_cat_active', 10, 2); 
2
Charlie Stanard