跳至主要內容
找不到符合條件的結果
  • 技術筆記
  • 工具庫
小豬日常
  • 技術筆記
  • 工具庫
小豬日常
首頁 技術筆記 WordPress 使用者頁面新增老師欄位與篩選功能實作筆記

WordPress 使用者頁面新增老師欄位與篩選功能實作筆記

  • 小豬
  • 2025-01-14
  • 技術筆記

內容目錄

Toggle
  • 前言
  • 一、在使用者編輯頁面新增自訂欄位
  • 二、保存欄位數據
  • 三、在使用者列表新增自訂欄位
  • 四、在使用者列表新增篩選功能
  • 實作結果
  • 完整程式碼

前言

在 WordPress 中,管理使用者時常需要新增自訂欄位以標示特定身份。本文針對如何在使用者編輯頁面新增「是否是老師」欄位,並在使用者列表中顯示及篩選此欄位進行說明,適合具備基礎 PHP 與 WordPress 開發經驗的工程師或自學者。

一、在使用者編輯頁面新增自訂欄位

首先,我們要在使用者編輯頁面新增一個勾選框,讓管理員能標記該使用者是否為老師。透過 show_user_profile 與 edit_user_profile 兩個 action,將欄位輸出到前端。

關鍵程式碼片段:

function ks_add_teacher_user_profile($user) {
    ?>

<h3>老師身分設定</h3>
    <table class="form-table">

<tr>

<th><label for="teacher_user">是否為老師</label></th>

<td>
                <input type="checkbox" name="teacher_user" id="teacher_user" value="1" <?php checked(get_user_meta($user->ID, 'teacher_user', true), 1); ?> />
                <span class="description">勾選此選項以標記此使用者為老師。</span>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'ks_add_teacher_user_profile');
add_action('edit_user_profile', 'ks_add_teacher_user_profile');

二、保存欄位數據

為了將勾選框的值存入資料庫,我們使用 personal_options_update 與 edit_user_profile_update 兩個 action,並利用 update_user_meta 保存。

關鍵程式碼片段:

function save_teacher_user_profile($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }

    $checkbox_value = isset($_POST['teacher_user']) ? 1 : 0;
    update_user_meta($user_id, 'teacher_user', $checkbox_value);
}
add_action('personal_options_update', 'save_teacher_user_profile');
add_action('edit_user_profile_update', 'save_teacher_user_profile');

三、在使用者列表新增自訂欄位

為了在使用者列表頁面顯示「是否是老師」欄位,我們需要新增欄位標題與欄位內容。

  1. 新增欄位標題:

    function ks_add_teacher_user_column($columns) {
     $columns['teacher_user'] = '老師';
     return $columns;
    }
    add_filter('manage_users_columns', 'ks_add_teacher_user_column');
  2. 顯示欄位內容:

    function ks_show_teacher_user_column($value, $column_name, $user_id) {
     if ('teacher_user' === $column_name) {
         $is_teacher_user = get_user_meta($user_id, 'teacher_user', true);
         return $is_teacher_user ? '已啟用' : '-';
     }
     return $value;
    }
    add_filter('manage_users_custom_column', 'ks_show_teacher_user_column', 10, 3);

四、在使用者列表新增篩選功能

為了方便管理員快速篩選出老師帳號,我們新增篩選按鈕與過濾邏輯。

  1. 新增篩選按鈕:

    function ks_add_teacher_user_filter_button($which) {
     if ('top' === $which) {
         ?>
         <a href="<?php echo admin_url('users.php?teacher_user_filter=1'); ?>" class="button">篩選老師</a>
         <?php
     }
    }
    add_action('restrict_manage_users', 'ks_add_teacher_user_filter_button');
  2. 過濾老師清單:

    function ks_filter_teacher_user_list($query) {
     global $pagenow;
    
     if ('users.php' === $pagenow && isset($_GET['teacher_user_filter']) && $_GET['teacher_user_filter'] === '1') {
         $meta_query = array(
             array(
                 'key' => 'teacher_user',
                 'value' => '1',
                 'compare' => '='
             ),
         );
         $query->set('meta_query', $meta_query);
     }
    }
    add_action('pre_get_users', 'ks_filter_teacher_user_list');

實作結果

完成以上步驟後,使用者編輯頁面會多出「是否是老師」勾選框,使用者列表頁面會顯示老師欄位並可透過篩選按鈕快速查看所有老師帳號,提升管理效率。

完整程式碼

function ks_add_teacher_user_profile($user) {
    ?>

<h3>老師身分設定</h3>
    <table class="form-table">

<tr>

<th><label for="teacher_user">是否為老師</label></th>

<td>
                <input type="checkbox" name="teacher_user" id="teacher_user" value="1" <?php checked(get_user_meta($user->ID, 'teacher_user', true), 1); ?> />
                <span class="description">勾選此選項以標記此使用者為老師。</span>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'ks_add_teacher_user_profile');
add_action('edit_user_profile', 'ks_add_teacher_user_profile');

function save_teacher_user_profile($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }

    $checkbox_value = isset($_POST['teacher_user']) ? 1 : 0;
    update_user_meta($user_id, 'teacher_user', $checkbox_value);
}
add_action('personal_options_update', 'save_teacher_user_profile');
add_action('edit_user_profile_update', 'save_teacher_user_profile');

function ks_add_teacher_user_column($columns) {
    $columns['teacher_user'] = '老師';
    return $columns;
}
add_filter('manage_users_columns', 'ks_add_teacher_user_column');

function ks_show_teacher_user_column($value, $column_name, $user_id) {
    if ('teacher_user' === $column_name) {
        $is_teacher_user = get_user_meta($user_id, 'teacher_user', true);
        return $is_teacher_user ? '已啟用' : '-';
    }
    return $value;
}
add_filter('manage_users_custom_column', 'ks_show_teacher_user_column', 10, 3);

function ks_add_teacher_user_filter_button($which) {
    if ('top' === $which) {
        ?>
        <a href="<?php echo admin_url('users.php?teacher_user_filter=1'); ?>" class="button">篩選老師</a>
        <?php
    }
}
add_action('restrict_manage_users', 'ks_add_teacher_user_filter_button');

function ks_filter_teacher_user_list($query) {
    global $pagenow;

    if ('users.php' === $pagenow && isset($_GET['teacher_user_filter']) && $_GET['teacher_user_filter'] === '1') {
        $meta_query = array(
            array(
                'key' => 'teacher_user',
                'value' => '1',
                'compare' => '='
            ),
        );
        $query->set('meta_query', $meta_query);
    }
}
add_action('pre_get_users', 'ks_filter_teacher_user_list');
標籤
# admin-filter# custom-field# PHP# user-list# user-meta# user-profile# WordPress
分享
在 Facebook 分享 在 X (Twitter) 分享 在 Line 分享 在 Threads 分享
上一 文章 使用 PHP 記錄 WooCommerce 訂單更新資料結構技術筆記
下一 文章 WordPress 自訂使用者搜尋功能實作筆記

相關文章

自訂 MemberPress 貨幣格式為無小數點整數顯示

  • 2025-12-15

WordPress 會員中心新增追蹤文章清單功能實作

  • 2025-12-14

使用 PHP 與 DOMDocument 自動產生 WordPress 文章預覽內容

  • 2025-12-13
© 2025 PigLife.tw 版權所有。