我們在昨天已經可以顯示我們增加的使用,但是在檢閱之中,並沒有顯示正確的roles,所以我們得要依靠著manage_users_columns去將新的roles 欄位做更新,而我們也是與昨天引入template一樣,我們先製作template,而我們以一個div作為基礎,並且呼叫我們的roles來做顯示。
//template/user_roles_filed.php
<div>
<?php
if(is_array($roles) && isset($roles)){
$shown_roles = implode(',',$roles);
echo $showm_roles;
}else{
echo 'None set';
}
?>
</div>
我們的模板之中,會使用roles
來當取得users的所有roles,而我們在設定好頁面之後,就是來設定我們的hook與呼叫函數,但我們並不是只有內容要改變,在原生的介面中,顯示的是role,而我們預計將它成為roles,所以在這個功能要完整,得加入兩個filter,manage_users_columns
與manage_users_columns_content
,一個來處理內容的標題,一個來處理內容,而我們藉由filter回傳後,將我們修改的文字回傳到原始的欄位上。
add_filter('manage_users_columns','go_ranger_fixed_title', 20 , 1);
public function go_ranger_fixed_title( $columns ) {
unset( $columns['role'] );
$columns['go_ranger_roles'] = __( 'Roles', 'go-ranger' );
return $columns;
}
add_filter('manage_users_custom_column', '' , 10 , 3);
public function output_column_content( $output, $column, $user_id ) {
if (false === in_array($column,'go_ranger_roles') ) return $output;
$user = new WP_User( $user_id );
$roles = ( array ) $user->roles;
ob_start();
include( 'template/user_roles_filed.php' );
$content = ob_get_clean();
return $conten;
}
如此,我們就可以將正確的使用列表加入在我們的使用之上,而昨天說的role其實在預設的只有一些而已,可以看見的就是從subscriber到administrator,在於要活用roles之中還有點落差,所以我們下一步做一個能簡單增加roles的,不過今天寫的時間太晚了,就沒辦法做增加caps的功能。
而基本上增加所有的role也是很簡單,我們使用add_roles
來處理,其實我們可以很簡單的處理做一個在init之中,就可以加入客製化的role。
add_role(
'custom_role',
__( 'Custom Role','go-ranger' ),
array(
'read' => true,
'edit_posts' => true,
)
);
而我們可以專門做一個頁面,來檢視所有的role與進行編輯,不過我們這邊為了明天要做shop as client來做準備,所以我把檢視roles與新增roles分離,並且沒有加入編輯的功能。
add_action( 'admin_menu', 'gogo_create_menu' );
function gogo_create_menu() {
// 建立主選單
add_menu_page( 'GoGopowerranger Settings Page', 'GoGopowerranger roles Setting',
'manage_options', 'gogGopowerranger-options', 'GoGopowerranger_roles_setting_page',
'dashicons-smiley', 99 );
add_submenu_page( 'gogGopowerranger-options', 'Add New Role', 'new-role', 'manage_options', 'ranger-new-role', 'ranger_new_role_page' );
}
function GoGopowerranger_roles_setting_page() {
$roles = get_roles_list();
foreach($roles as $role) {
echo $role.'</br>';
}
}
function ranger_new_role_page() {
if(isset($_POST['go_ranger_role_name'])){
add_role(ucwords($_POST['go_ranger_role_name']),
__( $_POST['go_ranger_role_name'],'go-ranger' ),
array(
'read' => true,
'edit_posts' => true,
))
echo "<div class='wp-notice information'>Add ".$_POST['go_ranger_role_name']."Succuseess </div>"
}
?>
<form method="post" action="">
<p>
<label>
Enter your role:
<input type="text" name="go_ranger_role_name"/>
</label>
</p>
<?php submit_button( 'Submit', 'primary' ); ?>
</form>
<?php
}
這樣我們就可以簡單的有列表以及創造的頁面了,並且有回傳的簡單訊息,製作與生產就是這麼樸實無華,我們明天開始剩下的兩天或是三天,將完成可以使用管理員製作一張新單,以及替客人下超過限制的客製化下單以及最重要的,計算出正確的價格。
How do I create a comma-separated list from an array in PHP?
How to Add Custom User Roles on Your WordPress Site