如何遍历自定义文章类型artwork并返回自定义分类法period及存档链接
解决WordPress自定义分类法period的存档链接展示问题
嘿,我来帮你搞定这个问题!你已经创建了artwork自定义文章类型和period自定义分类法,现在要在首页展示每个period分类并链接到它的存档页面,对吧?下面给你两种可行的方案,按需选择:
方案1:直接展示所有period分类(含存档链接)
如果想直接列出所有已创建的period分类,不管有没有关联的艺术作品,可以用get_terms()函数来获取分类数据,再配合get_term_link()生成存档链接:
<?php // 获取所有period分类,排除空分类(可选) $period_terms = get_terms(array( 'taxonomy' => 'period', 'hide_empty' => true, // 设为false会显示没有关联作品的分类 'orderby' => 'name', // 按分类名称排序,也可以用slug/ID等 'order' => 'ASC' )); // 检查是否有分类 if (!empty($period_terms) && !is_wp_error($period_terms)) { echo '<div class="period-categories">'; echo '<h3>艺术作品时期分类</h3>'; echo '<ul>'; foreach ($period_terms as $term) { // 获取分类存档链接 $term_link = get_term_link($term); // 检查链接是否有效 if (is_wp_error($term_link)) { continue; } echo '<li><a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a></li>'; } echo '</ul>'; echo '</div>'; } ?>
方案2:遍历artwork文章时,提取并去重展示对应period分类
如果只想展示有作品关联的period分类,并且是在遍历artwork文章的过程中提取,可以用这个方法(避免重复展示同一个分类):
<?php // 初始化一个数组存储已出现的period分类ID,用于去重 $seen_period_ids = array(); // 查询所有artwork文章 $artwork_query = new WP_Query(array( 'post_type' => 'artwork', 'posts_per_page' => -1, // 显示所有作品,可按需修改数量 'orderby' => 'date', 'order' => 'DESC' )); if ($artwork_query->have_posts()) { echo '<div class="artwork-periods">'; echo '<h3>作品所属时期</h3>'; echo '<ul>'; while ($artwork_query->have_posts()) { $artwork_query->the_post(); // 获取当前作品的period分类 $period_terms = get_the_terms(get_the_ID(), 'period'); if (!empty($period_terms) && !is_wp_error($period_terms)) { foreach ($period_terms as $term) { // 检查是否已经展示过这个分类 if (!in_array($term->term_id, $seen_period_ids)) { $seen_period_ids[] = $term->term_id; $term_link = get_term_link($term); if (!is_wp_error($term_link)) { echo '<li><a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a></li>'; } } } } } echo '</ul>'; echo '</div>'; // 重置查询 wp_reset_postdata(); } ?>
注意事项
- 确保你注册
artwork自定义文章类型时,已经将period分类法关联进去了(注册代码里要包含'taxonomies' => array('period')参数),否则分类和文章不会关联。 - 写完代码后,记得去WordPress后台的「设置→固定链接」页面刷新一下固定链接,避免分类存档页面出现404错误。
内容的提问来源于stack exchange,提问作者E.Owen
相关产品推荐
相关产品推荐

