管理領域のユーザー編集ページをカスタマイズするためのフィルターの欠如を回避するために、機能チェックをフィルターしようとしています。しかし、フックにフィルタを追加することはできないようで、基本的なものがここにないのは確かです。
問題のフックは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を返すことですが、実際にこれらの機能を削除することはできません私にとって、私の究極の目標とはより関連性があります。
私はついにそれを考え出しました:
まず、間違ったフックを使用していました。私は代わりにuser_has_cap
フックを使用しているはずです。これがcurrent_user_can()
を使用するときに実際に呼び出される可能性があるものです。
しかし第二に、そして最も重要なことに、super_adminとしてログインしている間にページが表示されていました。これはapply_filter
関数をまったくトリガーしませんでした。定義上、super_adminにはすべての機能があるため、WPはチェックをフィルタする必要性を感じません。