iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 28
0
自我挑戰組

Wordpress 外掛開發系列 第 28

「Wordpress 外掛開發」多重roles延伸版本,你還需要自定義roles

替代user之中的roles顯示

我們在昨天已經可以顯示我們增加的使用,但是在檢閱之中,並沒有顯示正確的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_columnsmanage_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

而基本上增加所有的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
}

這樣我們就可以簡單的有列表以及創造的頁面了,並且有回傳的簡單訊息,製作與生產就是這麼樸實無華,我們明天開始剩下的兩天或是三天,將完成可以使用管理員製作一張新單,以及替客人下超過限制的客製化下單以及最重要的,計算出正確的價格。

reference

How do I create a comma-separated list from an array in PHP?

How to Add Custom User Roles on Your WordPress Site


上一篇
「Wordpress 外掛開發」製作多重role的外掛,讓你的商業邏輯的可能性具現化
下一篇
「Wordpress 外掛開發」替你的上帝下訂單,上帝模式撰寫
系列文
Wordpress 外掛開發30

尚未有邦友留言

立即登入留言