我正在尝试实现一种方法,即在单个中为不同类别提供不同的颜色。php。因此,我创建了一个带有高级自定义字段的颜色选择器字段,该字段显示在每个类别页面上。然后,最终用户可以在存在此颜色选择器字段的每个类别页面中为每个类别选择一种颜色。之后,我唯一想得到最终用户选择的颜色是我单曲上的分类链接。php。
目前,如果我只有一个类别,我就可以很好地使用它。然而,当我为帖子分配多个类别时,它们都会变成与最后分配的类别相同的颜色。
这是我的代码:
$terms = get_the_terms( get_the_ID(), \'category\');
if( !empty($terms) ) {
$term = array_shift($terms);
$category_color = get_field(\'category_color\', $term );
}
$post_categories = get_the_category();
$separator = \' \';
$output = \'\';
if ( $post_categories ) {
foreach( $post_categories as $post_category ) {
$output .= \'<li class="meta-category">\';
$output .= \'<a style="color:\' . $category_color . \';" href="\' . esc_url( get_category_link( $post_category->term_id ) ) . \'" alt="\' . esc_attr( sprintf( __( \'View all posts in %s\', \'mytheme\' ), $post_category->name ) ) . \'">\' . esc_html( $post_category->name ) . \'</a>\' . $separator;
$output .= \'</li>\';
}
echo trim( $output, $separator );
}
为了更好地说明我所面临的问题,这里有一些我单曲中的入门类图片。php:
Image 1 - 例如,这里我有aciform类别,它被指定为红色字体颜色。它本身应该是红色的
Image 2 - 例如,这里我有一个美丽的类别,它被指定为蓝色的字体颜色。它本身应该是蓝色的
Image 3 - 在这里,我将这两个类别分配到了同一个职位。而预期的结果应该是针状-红色和美丽-蓝色。但出于某种原因,它们都显示为蓝色。。
我已经为此挣扎了一段时间,似乎找不到解决办法。我想这可能是我错过的一件很简单的事情,但过了这么久,我就是看不见了。
最合适的回答,由SO网友:Pieter Goosen 整理而成
您应该在foreach
环您当前所做的是获取所有post术语,获取第一个术语对象,然后将该术语的自定义字段值传递到foreach
每个学期结束后循环。
您的代码应该如下所示:
$post_categories = get_the_category();
if ( $post_categories ) {
$separator = \' \';
$output = \'\';
foreach( $post_categories as $post_category ) {
$category_color = get_field( \'category_color\', $post_category );
$output .= \'<li class="meta-category">\';
$output .= \'<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>\' . $separator;
$output .= \'</li>\';
}
echo trim( $output, $separator );
}
只是一个注释,始终将整个术语对象传递给
get_term_link()
和
get_category_link()
如果将ID或slug传递给这些函数,它们将进行另一个db调用以获取术语对象,这是完全不必要的。如果您传递术语对象(
,您已经有了它),则不会进行额外的db调用,因此这样可以节省大量资源,特别是如果您有大量帖子编辑您还可以构建一个数组并使用内爆显示字符串
$post_categories = get_the_category();
if ( $post_categories ) {
$separator = \' \';
$output = [];
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 );
}