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