web-dev-qa-db-fra.com

Walker donne un nom de taxonomie supplémentaire?

Je suis un débutant chez Wordpress, alors je vous serais reconnaissant de pouvoir me donner un petit coup de pouce de la bonne façon. Quoi qu'il en soit, ce qui m'irrite, c'est que wp_list_categories (et des fonctions similaires) produisent beaucoup de classes inutiles et d'autres choses dont je n'ai pas besoin.

J'ai essayé de créer ma propre classe de marcheur sur la base de Walker_Category et il semble que cela fonctionne. Tout ce dont j'ai besoin en tant que classe, c'est qu'une classe "actuelle" apparaisse quand il s'agit de la catégorie actuelle, mais si ce n'est pas le cas, je ne veux pas qu'une classe apparaisse du tout.

Cependant, pour une raison quelconque, je reçois une classe supplémentaire par mon nom de taxonomie. J'ai regardé ma classe de marcheurs un million de fois, mais je n'arrive pas à voir où il est indiqué que le nom de la taxonomie doit être stocké dans $ class. J'ai aussi regardé dans la classe originale de Walker, mais je n'en ai pas tiré grand profit.

S'il vous plaît aider? :)

 class Meow_Walker extends Walker_Category {

    var $tree_type = 'category';
    var $db_fields = array ('parent' => 'parent', 'id' => 'term_id');
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        if ( 'list' != $args['style'] )
            return;

        $indent = str_repeat("\t", $depth);
        $output .= "$indent<ul class='children'>\n";
    }
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        if ( 'list' != $args['style'] )
            return;

        $indent = str_repeat("\t", $depth);
        $output .= "$indent</ul>\n";
    }

    function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
        extract($args);

        $cat_name = esc_attr( $category->name );
        $cat_name = apply_filters( 'list_cats', $cat_name, $category );
        $link = '<a href="' . esc_url( get_term_link($category) ) . '"';
        $link .= '>';
        $link .= $cat_name . '</a>';

        if ( !empty($feed_image) || !empty($feed) ) {
            $link .= ' ';

            if ( empty($feed_image) )
                $link .= '(';

            $link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . '"';

            $link .= '>';

            if ( empty($feed_image) )
                $link .= $name;
            else
                $link .= "<img src='$feed_image'$alt$title" . ' />';

            $link .= '</a>';

            if ( empty($feed_image) )
                $link .= ')';
        }

        if ( !empty($show_count) )
            $link .= ' (' . intval($category->count) . ')';

        if ( 'list' == $args['style'] ) {
            $output .= "\t<li";
            if ( !empty($current_category) ) {
                $_current_category = get_term( $current_category, $category->taxonomy );
                if ( $category->term_id == $current_category )
                    $class .=  'current';
                elseif ( $category->term_id == $_current_category->parent )
                    $class .=  'current-parent';
            }
            $output .=  ' class="' . $class . '"';
            $output .= ">$link\n";
        } else {
            $output .= "\t$link<br />\n";
        }
    }

    function end_el( &$output, $page, $depth = 0, $args = array() ) {
        if ( 'list' != $args['style'] )
            return;

        $output .= "</li>\n";
    }

}

Edit: J'ai trouvé une solution de contournement, mais j'aimerais quand même savoir où $ class tire son nom de taxonomie ...

2
AKG

Edit : Après avoir examiné le code wp_list_categories(), j'ai remarqué que vous pouvez simplement passer un paramètre class à la fonction. Si vous transmettez une chaîne vide, le Walker intégré fera toujours écho à class="". Pour vous débarrasser entièrement de l'attribut class, vous devrez toujours utiliser un programme de déplacement personnalisé et modifier start_el:

function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
    // ...
    if ( 'list' == $args['style'] ) {
        $output .= "\t<li";
        if ( !empty($current_category) ) {
            $_current_category = get_term( $current_category, $category->taxonomy );
            if ( $category->term_id == $current_category )
                $class =  'current'; // removed string operator. not needed here anymore.
            elseif ( $category->term_id == $_current_category->parent )
                $class =  'current-parent'; // see above
        }
        if ( $class ) // skip output if no class is set
            $output .=  ' class="' . $class . '"';
        $output .= ">$link\n";
    } else {
        $output .= "\t$link<br />\n";
    }
    // ...
}

Chaque fois que WordPress exécute le rappel pour start_el, il transmettra le nom de la taxonomie (plus la classe par défaut) ainsi que d'autres informations en tant que 4ème paramètre: $args.

Pour supprimer la classe par défaut, vous pouvez supprimer/supprimer l'élément de classe dans le $args avant la ligne extract():

function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
    unset( $args['class'] );
    extract($args);
    // ...   
}

Vous voudriez également changer le code où le marcheur définit $class pour supprimer l'opérateur de chaîne.

if ( $category->term_id == $current_category )
    $class = 'current';
elseif ( $category->term_id == $_current_category->parent )
    $class = 'current-parent';
0
Daniel