首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

WordPress 給媒體庫文件添加分類與標簽:三種方案從簡單到專業

     編輯:PHP 相關知識

WordPress 給媒體庫文件添加分類與標簽:三種方案從簡單到專業

WordPress 媒體庫(附件)默認不支援分類/標簽,導致圖片、文檔難以組織篩選。本文提供三種方案:**一行代碼復用內建分類**、**一行代碼復用內建標簽**、**註冊獨立分類法(專業推薦)**,並附帶批量編輯插件推薦。

方案一:復用內建「分類目錄」(最簡單)

<?php
// functions.php
function ludou_attach_categories() {
    register_taxonomy_for_object_type('category', 'attachment');
}
add_action('init', 'ludou_attach_categories');
  • 媒體編輯頁右側出現「分類目錄」Meta Box,與文章共用分類體系。
  • 媒體列表頁新增「分類」列,支援快速篩選。
  • 左側菜單「媒體」下新增「分類目錄」子菜單。

方案二:復用內建「標簽」(最簡單)

function ludou_attach_tags() {
    register_taxonomy_for_object_type('post_tag', 'attachment');
}
add_action('init', 'ludou_attach_tags');
  • 媒體編輯頁出現「標簽」Meta Box,與文章共用標簽庫。
  • 列表頁新增「標簽」列,菜單新增「標簽」子項。

方案三:註冊獨立「媒體分類法」(專業推薦)

function ludou_register_media_category() {
    $args = [
        'label'              => '媒體分類',
        'labels'             => [
            'name'          => '媒體分類',
            'singular_name' => '媒體分類',
            'search_items'  => '搜索媒體分類',
            'all_items'     => '所有媒體分類',
            'edit_item'     => '編輯媒體分類',
            'update_item'   => '更新媒體分類',
            'add_new_item'  => '新增媒體分類',
            'new_item_name' => '新媒體分類名稱',
            'menu_name'     => '媒體分類',
        ],
        'hierarchical'       => true,      // 像分類目錄一樣分層
        'show_admin_column'  => true,      // 列表頁顯示分類列
        'show_ui'            => true,      # 後台顯示管理界面
        'query_var'          => true,      # 支援 ?media_category=xxx 查詢
        'rewrite'            => ['slug' => 'media-category'], // 前端重寫規則
        'show_in_rest'       => true,      # 區塊編輯器/REST API 可見
    ];
    register_taxonomy('media_category', 'attachment', $args);
}
add_action('init', 'ludou_register_media_category');
  • **完全隔離**:不污染文章分類/標簽體系。
  • **列表頁直觀**:`show_admin_column` 使媒體庫列表直接顯示分類,支持點擊篩選。
  • **REST API 支援**:Gutenberg 區塊編輯器、Headless 應用可直接讀寫。
  • **前端歸檔頁**:訪問 `example.com/media-category/xxx` 可查看該分類下所有媒體(需模板支援)。

三種方案對比

維度復用 category復用 post_tag獨立 media_category
代碼量1 行1 行~30 行
數據隔離❌ 與文章共用❌ 與文章共用✅ 完全隔離
層級結構✅ 支援父子❌ 扁平✅ 可選
列表頁顯示✅✅✅ (show_admin_column)
REST API✅✅✅ (show_in_rest)
適用場景小站、內容少、分類通用小站、標籤通用中大型站、媒體管理獨立、需前端歸檔

合併寫法(方案一+二)

function ludou_attach_cats_tags() {
    register_taxonomy_for_object_type('category', 'attachment');
    register_taxonomy_for_object_type('post_tag', 'attachment');
}
add_action('init', 'ludou_attach_cats_tags');

批量編輯插件推薦

Media Library Categories(官方倉庫免費)

  • 媒體庫列表頁勾選多文件 → 批量動作「設置分類」 → 一鍵完成。
  • 支援方案一(category)、方案三(自定義分類法)。
  • 無需編碼,編輯/運營人員可直接使用。

進階:前端按分類展示媒體庫

// 短代碼 [media_gallery category="design"]
add_shortcode('media_gallery', function($atts) {
    $atts = shortcode_atts(['category' => '', 'number' => 20], $atts);
    $query = new WP_Query([
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'posts_per_page' => $atts['number'],
        'tax_query'      => $atts['category'] ? [[
            'taxonomy' => 'media_category', // 或 'category'
            'field'    => 'slug',
            'terms'    => $atts['category'],
        ]] : [],
    ]);
    ob_start();
    if ($query->have_posts()) {
        echo '<div class="media-gallery">';
        while ($query->have_posts()) { $query->the_post();
            echo wp_get_attachment_image(get_the_ID(), 'medium', false, ['loading' => 'lazy']);
        }
        echo '</div>';
    }
    wp_reset_postdata();
    return ob_get_clean();
});

遷移建議

  • 新站直接上**方案三**,一勞永逸。
  • 舊站已用方案一/二:可並行運行方案三,逐步將媒體歸入新分類法,再決定是否清理舊關聯。
  • 資料庫層面:`wp_term_relationships` 表記錄關聯,遷移只需 `INSERT ... SELECT` 復制關係,再更新 `term_taxonomy_id`。

給媒體文件加分類/標簽,本質是將「非結構化文件」轉為「結構化資產」。選對分類法模型,能讓編輯效率提升 80% 以上,前端展示靈活度成倍增長。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved