Title: wp_ability_permission_result
Published: August 20, 2026

---

# apply_filters( ‘wp_ability_permission_result’, bool|WP_Error $permission, string $ability_name, mixed $input, WP_Ability $ability )

## In this article

 * [Description](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#wp--skip-link--target)

Filters the result of an ability’s permission check.

## 󠀁[Description](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#description)󠁿

Fires after the registered `permission_callback` returns. Plugins can use this to
layer additional authorization rules on top of the ability’s own permission logic—
for example, multi-factor authorization gates or temporary permission elevation 
for trusted contexts.

Filters can return `true` to grant, `false` to deny, or a `WP_Error` to deny with
a specific error code and message. The filter receives whatever the `permission_callback`
produced.
Any other return value is coerced to `false`.

## 󠀁[Parameters](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#parameters)󠁿

 `$permission`bool|[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)

The permission result returned by `permission_callback`.

`$ability_name`string

The name of the ability.

`$input`mixed

The input data for the permission check.

`$ability`[WP_Ability](https://developer.wordpress.org/reference/classes/wp_ability/)

The ability instance.

## 󠀁[Source](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#source)󠁿

    ```php
    $result = apply_filters( 'wp_ability_permission_result', $permission, $this->name, $input, $this );
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/abilities-api/class-wp-ability.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/abilities-api/class-wp-ability.php#L652)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/abilities-api/class-wp-ability.php#L652-L652)

## 󠀁[Related](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#related)󠁿

| Used by | Description | 
| [WP_Ability::check_permissions()](https://developer.wordpress.org/reference/classes/wp_ability/check_permissions/)`wp-includes/abilities-api/class-wp-ability.php` |

Checks whether the ability has the necessary permissions.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/hooks/wp_ability_permission_result/?output_format=md#changelog)󠁿

| Version | Description | 
| [7.1.0](https://developer.wordpress.org/reference/since/7.1.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fwp_ability_permission_result%2F)
before being able to contribute a note or feedback.