web-dev-qa-db-ja.com

ユーザー役割の更新

私は新しいユーザーロール(例えばクライアントロール)を追加するプラグインを開発しています。この役割は今のところ管理者役割を拡張するだけです。

add_role(
    'client',
    __('Client'),
    get_role('administrator')->capabilities
);

今私はクライアント機能を更新してinstall_plugins機能を削除するプラグインの新しいバージョンをリリースするつもりはありません。

役割は永続的なので、私はadd_roleを更新することはできません。

私の質問は、カスタムロールを管理し、その機能を更新する方法を教えてください。

1
Maxwell s.c

私の頭の上では、次のようなことができるはずです。

$role = get_role( 'client' );

if ( $role && $role->has_cap( 'install_plugins' ) ) {
  // Role not updated yet, so update it.
  $role->remove_cap( 'install_plugins' );
}

get_role()は成功するとWP_Roleオブジェクトを返し、WP_Role::remove_cap()WP_Roles::remove_cap()を呼び出します。これはデータベース内のオプションを直接更新します。 $role->has_cap()チェックは、コードが2回実行されていないことを確認します。

initにフックされた関数でこれを実行すれば十分です。

理想的にはあなたのプラグイン用に データベースバージョンオプション があるでしょう。これはプラグインの更新ごとに一回だけコードを実行するために使用できます。そうでなければ、誰かが手動でinstall_plugins機能をあなたのロールに再び追加するたびにあなたのコードは再び実行されます。それは必ずしも悪いわけではありませんが、防ぐことができます:-)

コード参照:

2
swissspidy