web-dev-qa-db-ja.com

Role_has_capフック使用時の問題

管理領域のユーザー編集ページをカスタマイズするためのフィルターの欠如を回避するために、機能チェックをフィルターしようとしています。しかし、フックにフィルタを追加することはできないようで、基本的なものがここにないのは確かです。

問題のフックはrole_has_capの343行目にあるwp-includes/capabilities.phpです。それは読みます:

$capabilities = apply_filters( 'role_has_cap', $this->capabilities, $cap, $this->name );

これを私のfunctions.phpに追加して私のフィルタをテストしようとしています。

add_filter('role_has_cap', 'my_role_has_cap_filter', 10, 3);
function my_role_has_cap_filter($var_one, $var_two, $var_three) {
    print_r($var_one);
    print_r($var_two);
    print_r($var_three);
}

しかし、絶対に何も起こりません。私の関数が必要とするよりも少ないパラメータでフィルタを追加したとしても(私の限られた知識ではPHPエラーを引き起こすはずです)、私はWordPressでは完全に無視されます。

私が実際に達成しようとしているのは、管理領域でuser-edit.phpを表示するときにcurrent_user_can( 'edit_posts' )またはcurrent_user_can( 'edit_pages' )にfalseを返すことですが、実際にこれらの機能を削除することはできません私にとって、私の究極の目標とはより関連性があります。

2
Tomas Buteler

私はついにそれを考え出しました:

まず、間違ったフックを使用していました。私は代わりにuser_has_capフックを使用しているはずです。これがcurrent_user_can()を使用するときに実際に呼び出される可能性があるものです。

しかし第二に、そして最も重要なことに、super_adminとしてログインしている間にページが表示されていました。これはapply_filter関数をまったくトリガーしませんでした。定義上、super_adminにはすべての機能があるため、WPはチェックをフィルタする必要性を感じません。

0
Tomas Buteler