web-dev-qa-db-fra.com

Ajouter un style en ligne à get_the_category_list

J'ai besoin d'appeler la get_the_category_list() une balise mais je n'arrive pas à trouver un moyen.

Ceci est mon code:

echo '<ul class="list-inline meta-list">';
    // Get the categories
    $terms = get_the_terms( get_the_ID(), 'category');

    if( !empty($terms) ) {

        $term = array_pop($terms);
        $category_color = get_field('category_color', $term );
    }

    $category_list = get_the_category_list( ' ' );
    if ( $category_list ) {
        echo '<li class="meta-categories">' . __( 'In ', 'my_theme' ) . $category_list . ' </li>';
    }

echo '</ul>';

Maintenant, je dois ajouter style="color:$category_color;" à get_the_category_list() pour que chaque catégorie ait une couleur différente dans le modèle single.php.

1
Madeirense

get_the_category_list() n'a pas vraiment de filtres pour obtenir ce que vous voulez. Vous aurez actuellement besoin de PHP comme preg_replace() pour modifier les balises d'ancrage. Le gros problème serait d’obtenir l’objet terme du lien actuel, ce qui, à mon avis, en ferait une procédure assez compliquée.

Vous pouvez toutefois écrire votre propre fonction pour obtenir le même résultat.

function wpse_219554_term_list()
{
    $post = get_post();

    $separator = ' ';
    $output    = [];

    $post_categories = get_the_category( $post->ID );
    if ( $post_categories ) {
        foreach( $post_categories as $post_category ) {
            $category_color = get_field( 'category_color', $post_category );
            $output[] = '<li class="meta-category">
                             <a style="color:' . $category_color . ';" href="' . esc_url( get_category_link( $post_category ) ) . '" alt="' . esc_attr( sprintf( __( 'View all posts in %s', 'mytheme' ), $post_category->name ) ) . '"> 
                                 ' . esc_html( $post_category->name ) . '
                             </a>
                        </li>';
        }

        if ( $output )
            echo implode( $separator, $output );
    }
}

EDIT 08 mars 2016

Le code source de get_the_category_link() est assez confus et répétitif. J'ai donc soumis un ticket de traçage pour un nettoyage éventuel et une micro-optimisation du code.

J'ai également suggéré un nouveau filtre, the_category_list_links, qui peut être utilisé pour filtrer individuellement les liens de catégorie en fonction de la catégorie. Si cela est accepté dans le noyau, nous pouvons utiliser le filtre pour filtrer les liens en fonction des besoins du PO, ce qui fonctionnera alors.

add_filter( 'the_category_list_links', function ( $the_link_list, $category, $cat_parents )
{
    $category_color = get_field( 'category_color', $category );
    if ( !$category_color )
        return $the_link_list;

    $the_link_list = str_replace( '<a', '<a style="color:' . $category_color . '"', $the_link_list );

    return $the_link_list;
}, 10, 3 );

Vous pouvez lire et contribuer au billet actuel trac n ° 36171 , et n'hésitez pas à proposer des modifications pour que nous puissions l'intégrer à la prochaine version majeure.

4
Pieter Goosen