「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


<<:  Day 27 | 等待的时间不无聊 - loader

>>:  Day 27 讨论 AI 深度学习论点

Transactions (2) - Data Object Operation

单物件 (Single-Object) 和多物件 (Multi-Object) 操作 多物件 (Mu...

Snapshot API测试

接下来照着永丰提供的github, 下一个要使用到的是快照-Snapshot的部分, 简单来说就是当...

【从实作学习ASP.NET Core】Day14 | 後台 | 用 Identity 实作会员功能

今天要用 .NET Core 自带的使用者管理套件 Identity 来实现网站的会员功能 ASP....

Day 22.5 | Livewire 实作 购物网站: 建立资料表

本来预计都写在 Day22 的,但是加上本篇内容後会让一天的篇幅太长,且考虑到有些夥伴可能没有建立资...

Day15 Sass import

大家好我是乌木白,今天要讲 Sass 篇的 import,让我们一起学习! 什麽是Import? ...