web-dev-qa-db-ja.com

'manage_options'機能を一時的に与える

編集者が他の人の作者のメタ(update_user_attribute)を編集できるようにするには、それらに 'manage_options'機能を付与しなければなりません。私は彼らにこの機能をある特定のEdit Author Metaページで与えたいだけです。

私は 'admin'テーブルにアクセスするために 'list_users'に '編集者'権限を与えます。私は、特定の著者のメタページに入る際に、「manage_options」に「編集者」権限を与えます。 (私は関数save_profile_fieldsの先頭に配置しようとしましたが、それでもdieメッセージを受け取りました。)

Save_profile_fields関数の下部にある「manage_options」機能を削除しました。これはうまくいきますが、編集者が作者のメタページに何かを保存することを怠った場合、編集者は 'manage_options'機能を維持します。

if( !current_user_can( 'manage_options' ) && current_user_can( 'edit_others_posts' ) ){
    $edit_editor_role = get_role( 'editor' );
    $edit_editor_role->add_cap( 'manage_options' );
}

編集者ロールから機能「manage_options」をどこで削除しますか?

$edit_editor_role = get_role( 'editor' );
$edit_editor_role->remove_cap( 'manage_options' );
5
AlxVallejo

良い質問!機能チェックは、おそらくロードプロセスのかなり早い段階で行われます。 /wp-admin/users.phpを見れば、最初に起こることの1つがcurrent_user_can( 'list_users' )であることがわかります。そのため、1つが明らかに必要とされているか、または "Cheatin 'ええ?"となるでしょう。警告。しかしその直前には/wp-admin/admin.phpが含まれており、そのファイルの最後にはWordPressがload-users.phpをロードするときにwp-admin/users.phpを呼び出すでしょう。

つまり、そのページのロード中にタスクを実行するために必要な機能を追加する機能をセットアップできるはずです(当然のことながら、現在のユーザーには十分な権限が与えられていることを前提として)。このようなことは、ユーザにユーザリストとユーザ編集ページの新しい機能を与えるときにうまくいくかもしれません:

function my_add_caps() {
    // add capabilities here
}
add_action('load-users.php', 'my_add_caps');
add_action('load-profile.php', 'my_add_caps'); // might be needed if you somehow cannot edit your own user
add_action('load-user-edit.php', 'my_add_caps');

ただし、機能が削除されることについてはそれほど心配する必要はありません。ページが読み込まれると、追加された機能がその役割を果たします。ただし、オプションの検証/保存中にWordPressによって実行される機能チェックの量によっては、オプションの保存を担当する管理者ページまたはAJAX要求ハンドラの機能を追加する必要があるかもしれません。

1
Simon