如何在WordPress分类中使用自定义字段并在文章列表调用展示
问题原因
原代码的核心错误是the_category()函数的特性:这个函数会直接输出分类链接文本,不会返回分类对象/ID,所以ACF的get_field()根本拿不到正确的分类参数,自然取不到对应的色值。同时自定义WP_Query的循环写法也有遗漏,容易和主查询冲突。
修正后完整代码
<div class="blog-post-grids"> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array('post_type' => 'post', 'posts_per_page' => 9, 'paged' => $paged); $wp_query = new WP_Query($args); // 自定义查询需要指定查询对象 while ($wp_query->have_posts()): the_post(); ?> <figure class="blog-post-cart"> <div><?php the_post_thumbnail();?></div> <figcaption> <a href="<?php the_permalink() ?>"> <h2><?php the_title()?></h2> </a> <p> <?php // 获取当前文章关联的所有分类对象 $categories = get_the_category(); $category_output = array(); if (!empty($categories)) { foreach ($categories as $cat) { // ACF读取分类字段的参数格式为 分类法_分类ID $color = get_field('color-code', 'category_' . $cat->term_id); // 拼接带自定义颜色的分类链接 $category_output[] = '<a href="' . get_category_link($cat->term_id) . '" style="color:' . esc_attr($color) . '">' . esc_html($cat->name) . '</a>'; } // 逗号分隔输出所有分类 echo implode(', ', $category_output); } ?> </p> <?php the_content(''); ?> </figcaption> </figure> <?php endwhile; // 重置全局post数据,避免污染主查询 wp_reset_postdata(); ?> </div>
适配单颜色场景(所有分类共用第一个分类的色值)
如果你不需要每个分类单独设色,想让整个p标签用第一个分类的色值,可以把上面p标签内的逻辑替换为:
<?php $categories = get_the_category(); $color = ''; if (!empty($categories)) { $color = get_field('color-code', 'category_' . $categories[0]->term_id); } ?> <p style="color: <?php echo esc_attr($color) ?>"> <?php the_category(', ') ?> </p>
内容的提问来源于stack exchange,提问作者curlybom
相关产品推荐
相关产品推荐

