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

如何显示文章分类缩略图?调用the_category_thumbnail()函数报错

文章分类缩略图显示问题解决方法

错误原因

WordPress原生的文章分类(Category)并没有内置缩略图功能,你使用的the_category_thumbnail()并非WordPress原生函数,这就是导致严重错误的直接原因。而WooCommerce产品分类是自定义分类,本身带有缩略图支持,所以你之前的方法能生效。

解决方案

要实现文章分类缩略图,需要先给分类添加缩略图支持,再在前端获取显示,具体步骤如下:

1. 给文章分类添加缩略图支持(主题functions.php中添加代码)

将以下代码添加到当前主题的functions.php文件中,这段代码会在分类编辑页面添加缩略图上传功能,并保存对应的图片ID:

// 注册分类缩略图元字段
add_action('init', 'register_category_thumbnail_meta');
function register_category_thumbnail_meta() {
    register_meta('term', 'category_thumbnail_id', array(
        'type' => 'integer',
        'description' => '存储分类缩略图的附件ID',
        'single' => true,
        'show_in_rest' => true,
        'sanitize_callback' => 'absint',
        'auth_callback' => function() {
            return current_user_can('manage_categories');
        }
    ));
}

// 添加分类新增页面的缩略图上传框
add_action('category_add_form_fields', 'render_category_thumbnail_field_add');
function render_category_thumbnail_field_add() {
    ?>
    <div class="form-field">
        <label for="category_thumbnail_id">分类缩略图</label>
        <input type="hidden" id="category_thumbnail_id" name="category_thumbnail_id" value="">
        <div id="category_thumbnail_preview" style="margin:10px 0;"></div>
        <button type="button" class="button" id="upload_category_thumbnail">选择图片</button>
        <button type="button" class="button" id="remove_category_thumbnail" style="display:none;">移除图片</button>
        <script>
            jQuery(document).ready(function($) {
                let mediaFrame;
                $('#upload_category_thumbnail').on('click', function(e) {
                    e.preventDefault();
                    if (mediaFrame) {
                        mediaFrame.open();
                        return;
                    }
                    mediaFrame = wp.media({
                        title: '选择分类缩略图',
                        button: { text: '使用此图片' },
                        multiple: false
                    });
                    mediaFrame.on('select', function() {
                        const attachment = mediaFrame.state().get('selection').first().toJSON();
                        $('#category_thumbnail_id').val(attachment.id);
                        $('#category_thumbnail_preview').html(`<img src="${attachment.url}" style="max-width:200px;">`);
                        $('#remove_category_thumbnail').show();
                    });
                    mediaFrame.open();
                });
                $('#remove_category_thumbnail').on('click', function(e) {
                    e.preventDefault();
                    $('#category_thumbnail_id').val('');
                    $('#category_thumbnail_preview').empty();
                    $(this).hide();
                });
            });
        </script>
    </div>
    <?php
}

// 添加分类编辑页面的缩略图上传框
add_action('category_edit_form_fields', 'render_category_thumbnail_field_edit');
function render_category_thumbnail_field_edit($term) {
    $thumbnail_id = get_term_meta($term->term_id, 'category_thumbnail_id', true);
    $preview = $thumbnail_id ? `<img src="${wp_get_attachment_url($thumbnail_id)}" style="max-width:200px;">` : '';
    ?>
    <tr class="form-field">
        <th scope="row"><label for="category_thumbnail_id">分类缩略图</label></th>
        <td>
            <input type="hidden" id="category_thumbnail_id" name="category_thumbnail_id" value="<?php echo esc_attr($thumbnail_id); ?>">
            <div id="category_thumbnail_preview" style="margin:10px 0;"><?php echo $preview; ?></div>
            <button type="button" class="button" id="upload_category_thumbnail">选择图片</button>
            <button type="button" class="button" id="remove_category_thumbnail" <?php echo $thumbnail_id ? '' : 'style="display:none;"'; ?>>移除图片</button>
            <script>
                jQuery(document).ready(function($) {
                    let mediaFrame;
                    $('#upload_category_thumbnail').on('click', function(e) {
                        e.preventDefault();
                        if (mediaFrame) {
                            mediaFrame.open();
                            return;
                        }
                        mediaFrame = wp.media({
                            title: '选择分类缩略图',
                            button: { text: '使用此图片' },
                            multiple: false
                        });
                        mediaFrame.on('select', function() {
                            const attachment = mediaFrame.state().get('selection').first().toJSON();
                            $('#category_thumbnail_id').val(attachment.id);
                            $('#category_thumbnail_preview').html(`<img src="${attachment.url}" style="max-width:200px;">`);
                            $('#remove_category_thumbnail').show();
                        });
                        mediaFrame.open();
                    });
                    $('#remove_category_thumbnail').on('click', function(e) {
                        e.preventDefault();
                        $('#category_thumbnail_id').val('');
                        $('#category_thumbnail_preview').empty();
                        $(this).hide();
                    });
                });
            </script>
        </td>
    </tr>
    <?php
}

// 保存分类缩略图元数据
add_action('create_category', 'save_category_thumbnail_meta');
add_action('edited_category', 'save_category_thumbnail_meta');
function save_category_thumbnail_meta($term_id) {
    if (isset($_POST['category_thumbnail_id'])) {
        update_term_meta($term_id, 'category_thumbnail_id', absint($_POST['category_thumbnail_id']));
    }
}

2. 在后台上传分类缩略图

添加代码后,进入WordPress后台的文章→分类页面,新增或编辑分类时就能看到「分类缩略图」的上传选项,上传并保存即可。

3. 修改前端代码显示缩略图

替换你原来的代码,使用get_term_meta()获取缩略图ID,再用wp_get_attachment_image()输出图片:

$categories = get_categories([
    "orderby" => 'name',
    'number' => 4,
    'exclude' => 29,
]);

foreach ($categories as $category) {
    echo $category->name;
    echo $category->description;
    
    // 获取分类缩略图ID
    $thumbnail_id = get_term_meta($category->term_id, 'category_thumbnail_id', true);
    if ($thumbnail_id) {
        // 输出指定尺寸的缩略图,可替换为'large'、'thumbnail'或自定义尺寸名
        echo wp_get_attachment_image($thumbnail_id, 'medium');
    }
}

替代方案

如果不想手动写代码,可以使用现成的WordPress插件,比如Category Thumbnails或Taxonomy Thumbnail,这类插件会自动帮你实现分类缩略图的上传和调用功能。

内容的提问来源于stack exchange,提问作者FERDAUSSK 01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:35:15