wake-up-neo.com

Fügen Sie der get_the_category_list einen Inline-Stil hinzu

Ich muss die get_the_category_list() als Tag formatieren, kann aber keinen Weg finden.

Das ist mein 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>';

Jetzt muss ich style="color:$category_color;" zu get_the_category_list() hinzufügen, damit jede Kategorie in der Vorlage single.php eine andere Farbe hat.

1
Madeirense

get_the_category_list() hat eigentlich keine Filter, um das zu erreichen, was du willst. Sie benötigen derzeit PHP like preg_replace(), um die Ankertags zu ändern. Das große Problem wäre, das Term-Objekt des aktuellen Links zu erhalten, was meiner Meinung nach zu einem ziemlich chaotischen Vorgang führen würde.

Sie könnten jedoch Ihre eigene Funktion schreiben, um dasselbe zu erreichen

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 März 2016

Der Quellcode von get_the_category_link() ist ziemlich chaotisch und wiederholt sich ziemlich, daher habe ich ein Trac-Ticket für eine mögliche Bereinigung und Mikrooptimierung des Codes eingereicht.

Ich habe auch einen neuen Filter vorgeschlagen, the_category_list_links, mit dem Sie Kategorielinks individuell nach Kategorien filtern können. Wenn dies im Kern akzeptiert wird, können wir den Filter verwenden, um die Links nach OP-Anforderungen zu filtern, so etwas funktioniert dann

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

Sie können das aktuelle trac-Ticket # 36171 lesen und einen Beitrag dazu leisten. Sie können jederzeit Änderungen vorschlagen, damit wir dies in die nächste Hauptversion aufnehmen können

4
Pieter Goosen