You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在服务页面展示Services分类所有文章及自定义文章分类名称与发布日期

解决WordPress自定义文章类型Services的两个展示需求

我正在开发首个WordPress主题,有两个核心需求:

  • 在服务页面展示Service Categories分类下的所有文章;
  • 在自定义文章类型services的单篇文章预览中,仅显示该文章选中的分类名称(不带链接)以及发布日期。

此前尝试使用get_terms()函数,但该函数会返回所有分类,无法满足单篇文章仅显示对应选中分类的需求。以下是已注册的services自定义文章类型及相关分类的代码,以及一段尝试实现分类文章展示的代码:

已注册的自定义文章类型与分类代码

function create_services_taxonomy() {
    // Services Categories
    register_taxonomy('service_category', 'services', array(
        'labels' => array(
            'name' => 'Service Categories',
            'singular_name' => 'Service Category',
            'search_items' => 'Search Service Categories',
            'all_items' => 'All Service Categories',
            'edit_item' => 'Edit Service Category',
            'update_item' => 'Update Service Category',
            'add_new_item' => 'Add New Service Category',
            'new_item_name' => 'New Service Category Name',
            'menu_name' => 'Service Categories',
        ),
        'hierarchical' => true, // 类似默认分类结构
        'show_admin_column' => true,
        'show_in_rest' => true, // 支持Gutenberg编辑器
        'rewrite' => array('slug' => 'service-category'),
    ));

    // Services Tags
    register_taxonomy('service_tag', 'services', array(
        'labels' => array(
            'name' => 'Service Tags',
            'singular_name' => 'Service Tag',
            'search_items' => 'Search Service Tags',
            'all_items' => 'All Service Tags',
            'edit_item' => 'Edit Service Tag',
            'update_item' => 'Update Service Tag',
            'add_new_item' => 'Add New Service Tag',
            'new_item_name' => 'New Service Tag Name',
            'menu_name' => 'Service Tags',
        ),
        'hierarchical' => false, // 类似默认标签结构
        'show_admin_column' => true,
        'show_in_rest' => true, // 支持Gutenberg编辑器
        'rewrite' => array('slug' => 'service-tag'),
    ));
}
add_action('init', 'create_services_taxonomy');

function create_services_post_type() {
    register_post_type('services', array(
        'labels' => array(
            'name' => 'Services',
            'singular_name' => 'Service',
            'add_new' => 'Add New',
            'add_new_item' => 'Add New Service',
            'edit_item' => 'Edit Service',
            'new_item' => 'New Service',
            'view_item' => 'View Service',
            'search_items' => 'Search Services',
            'not_found' => 'No services found',
            'not_found_in_trash' => 'No services found in Trash',
        ),
        'public' => true,
        'has_archive' => true,
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'), // 可按需添加更多支持项
        'show_in_rest' => true, // 支持Gutenberg编辑器
        'rewrite' => array('slug' => 'services'),
    ));
}
add_action('init', 'create_services_post_type');

此前尝试的分类文章展示代码

<?php
// 获取'services'分类法下的所有分类项
$terms = get_terms(array(
    'taxonomy' => 'services',
    'hide_empty' => false, // 设为true则仅显示包含文章的分类
));

if (!empty($terms) && !is_wp_error($terms)) {
    foreach ($terms as $term) {
        echo '<h2>' . esc_html($term->name) . '</h2>';
        echo '<p>' . esc_html(term_description($term)) . '</p>';

        // 查询当前分类下的文章
        $term_posts = new WP_Query(array(
            'post_type' => 'services', // 替换为你的自定义文章类型
            'tax_query' => array(
                array(
                    'taxonomy' => 'services',
                    'field' => 'term_id',
                    'terms' => $term->term_id,
                ),
            ),
        ));

        if ($term_posts->have_posts()) {
            echo '<ul>';
            while ($term_posts->have_posts()) {
                $term_posts->the_post();
                echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
            }
            echo '</ul>';
            wp_reset_postdata();
        } else {
            echo '该服务分类下暂无文章。';
        }
    }
} else {
    echo '未找到服务分类。';
}
?>

解决方案

一、修正服务页面的分类文章展示代码

此前代码的核心问题是taxonomy参数错误,你注册的分类法是service_category,而非services。以下是修正后的代码:

<?php
// 获取Service Categories分类下的所有分类项(仅显示包含文章的分类)
$terms = get_terms(array(
    'taxonomy' => 'service_category',
    'hide_empty' => true,
));

if (!empty($terms) && !is_wp_error($terms)) {
    foreach ($terms as $term) {
        echo '<h2>' . esc_html($term->name) . '</h2>';
        echo '<p>' . esc_html(term_description($term)) . '</p>';

        // 查询当前分类下的所有services文章
        $term_posts = new WP_Query(array(
            'post_type' => 'services',
            'tax_query' => array(
                array(
                    'taxonomy' => 'service_category',
                    'field' => 'term_id',
                    'terms' => $term->term_id,
                ),
            ),
            'posts_per_page' => -1, // 显示该分类下所有文章
        ));

        if ($term_posts->have_posts()) {
            echo '<ul>';
            while ($term_posts->have_posts()) {
                $term_posts->the_post();
                echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
            }
            echo '</ul>';
            wp_reset_postdata();
        } else {
            echo '<p>该分类下暂无服务内容</p>';
        }
    }
} else {
    echo '<p>暂无服务分类</p>';
}
?>

二、在services单篇文章中显示选中分类与发布日期

使用get_the_terms()函数获取当前文章关联的分类,而非get_terms()。将以下代码放入你的single-services.php模板中合适位置:

<?php
// 获取当前文章所属的Service Categories分类
$service_categories = get_the_terms(get_the_ID(), 'service_category');

// 显示分类名称(不带链接)
if (!empty($service_categories) && !is_wp_error($service_categories)) {
    echo '<div class="service-category">';
    echo '<span>分类:</span>';
    $category_names = array();
    foreach ($service_categories as $category) {
        $category_names[] = esc_html($category->name);
    }
    echo implode(', ', $category_names);
    echo '</div>';
}

// 显示发布日期(可自定义格式)
echo '<div class="service-date">';
echo '<span>发布日期:</span>' . get_the_date('Y年m月d日');
echo '</div>';
?>

说明:

  • get_the_terms()仅返回当前文章关联的分类项,完美解决单篇文章显示对应分类的需求;
  • get_the_date()的参数可按需调整日期格式,比如'F j, Y'对应英文格式“January 1, 2024”。

内容的提问来源于stack exchange,提问作者iCreative Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:40:58