J'ai écrit ma propre fonction pour lister tous les termes de taxonomie d'une taxonomie donnée…
function wr_list_taxonomy($taxonomy, $orderby, $hierarchical) {
$show_count = 0;
$pad_counts = 0;
$title = '';
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title
);
return wp_list_categories( $args );
}
Donc, cette fonction fonctionne exactement comme wp_list_categories()
et crée également une classe "cat courant" une fois que je suis sur une page de terme.
Alors imaginez ma structure d'URL…
www.mysite.com/term //current-cat works perfect
www.mysite.com/term/a-post-associated-with-this-term //current-cat not assigned
Existe-t-il une chance de faire fonctionner la classe "chat actuel" une fois que je suis dans un poste mais dans cette "catégorie" comme indiqué ci-dessus?
mise à jour:
La fonction wr_list_taxonomy()
est appelée dans mon fichier header.php
.
<nav id="main-nav">
<ul class="wr-nav" role="navigation">
<?php
global $post;
$taxonomy = 'event_type';
$term_id = 0;
$terms = wp_get_post_terms( $post->ID, $taxonomy, array("fields" => "ids") );
if ( !empty($terms) )
$term_id = $terms[0];
wr_list_taxonomy($taxonomy, 'name', 1, $term_id); ?>
</ul>
</nav>
J'ai mis à jour la fonction wr_list_taxonomy()
à votre version.
De plus, j'ai une autre fonction qui pourrait être pertinente pour la chose que je veux…
/**
* Add category-slug as classname to wp_list_categories()
*/
add_filter('wp_list_categories', 'add_slug_css_list_categories', 10, 2);
function add_slug_css_list_categories($list, $args) {
if ( $args["taxonomy"] == "event_type" ) {
$cats = get_terms('event_type');
$class = 'term term-';
} else {
$cats = get_categories();
$class = 'category-';
}
foreach( $cats as $cat ) {
$find = 'cat-item-' . $cat->term_id . '"';
$replace = $class . $cat->slug . '"';
$list = str_replace( $find, $replace, $list );
$find = 'cat-item-' . $cat->term_id . ' ';
$replace = $class . $cat->slug . ' ';
$list = str_replace( $find, $replace, $list );
}
return $list;
}
Cette fonction ajoute la "catégorie-slug" à chaque élément <li>
de la fonction wr_list_taxonomy()
. Cela fonctionne bien.
J'ai juste besoin que la classe "current-cat" soit également appliquée lorsque je suis sur un site single.php (post) associé à la "catégorie actuelle" dans laquelle je suis.
Oui bien sur. Vous devez juste obtenir le terme id et le mettre sur les arguments. Vérifier wp_list_categories()
function wr_list_taxonomy($taxonomy, $orderby, $hierarchical, $cat_id) {
$show_count = 0;
$pad_counts = 0;
$title = '';
$cat_id = 0;
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'current_category' => $cat_id
);
return wp_list_categories( $args );
}
Vous devez passer l'id de la catégorie ou du terme. Pour que ça marche.
Comment obtenez-vous l'ID de la catégorie?
Par exemple:
global $post;
$taxonomy = 'my-tax';
$term_id = 0;
if(is_singular('post')){ // post type is optional.
$terms = wp_get_post_terms( $post->ID, $taxonomy, array("fields" => "ids") );
if(!empty($terms))
$term_id = $terms[0]; //we need only one term id
}
wr_list_taxonomy($taxonomy, $orderby, $hierarchical, $term_id);
C'est juste un exemple simple et il y a d'autres façons de le faire. Cela dépend de l'endroit où vous utilisez le code.