Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm trying to filter a capability check in order to work around the lack of filters to customize the user edit page in the admin area. But I can't seem to add filters to a hook, and I'm sure I'm missing something basic here.

The hook in question is role_has_cap, located at line 343 of wp-includes/capabilities.php. It reads:

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

I'm trying to test my filter by adding this to my 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);
}

But absolutely nothing happens. Even if I add the filter with less parameters than my function requires (which, in my limited knowledge, should trigger a PHP error) I'm completely ignored by WordPress.

What I'm actually trying to achieve is returning false to a current_user_can( 'edit_posts' ) or current_user_can( 'edit_pages' ) when viewing user-edit.php on the admin area, without actually removing those capabilities, but the fact that a filter is not applying seems to me more relevant that my ultimate goal.

share|improve this question
    
Do you have WP_DEBUG set to TRUE? Further: Try to wrap your filter call inside a function that you hook during init. –  kaiser Feb 21 '12 at 12:37
    
I do have WP_DEBUG set to TRUE. I've wrapped it around a function on init, but still get nothing. –  tbuteler Feb 21 '12 at 12:49
    
Oh. You always need to return the 1st argument in the list. –  kaiser Feb 21 '12 at 12:51
    
Plus: The filter should only work if you're actually questioning if some role has a cap in one of your templates (for example). Else the fn won't get triggered. –  kaiser Feb 21 '12 at 12:52
1  
The filter is inside a function that returns true or false, it won't produce output, not in the way it's used. If you want to dump that data, just do it inside the core file directly(wp-includes/capabilities.php), then undo the changes when you're done seeing what you need to see. –  Mark Duncan Feb 21 '12 at 13:11
show 3 more comments

1 Answer

up vote 0 down vote accepted

I finally figured it out:

To start with, I was using the wrong hook. I should have been using user_has_cap hook instead, which is what actually has a chance of being called when using current_user_can().

But second, and most important of all, I was seeing the page while logged-in as super_admin, which didn't trigger the apply_filter function at all. Since by definition the super_admin has all capabilities, WP doesn't feel the need to filter any of the checks.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.