在 WordPress 中,為使用者管理新增自訂欄位是一種常見的需求。本文將介紹如何新增一個”是否是老師”的選項,讓您可以標記使用者是否為老師。以下是完整的實作步驟及程式碼解析。
一、在使用者編輯頁面新增自訂欄位
首先,我們需要在使用者編輯頁面新增一個勾選框,讓管理員可以選擇是否標記某位使用者為老師。
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');
三、在使用者列表新增自訂欄位
為了在 WordPress 的使用者列表頁面展示”是否是老師”,我們需要新增一個自訂欄位。
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');
實作結果
完成以上步驟後,您將能在使用者編輯頁面新增”是否是老師”的選項,並在使用者列表頁面新增對應的欄位及篩選功能。
這些功能可以讓您更方便地管理老師帳號,提高工作效率。