Avoid PHP notices when checking termmeta capabilities against a non-existent term.

Previously, checks like `current_user_can( 'edit_term_meta', $term_id )`
returned the proper value, but generated a PHP notice due to the fact
that `get_term( $term_id )` could, in certain instances, return
`WP_Error` objects.

Props caercam.
Fixes #40891.

git-svn-id: https://develop.svn.wordpress.org/trunk@40999 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2017-07-04 19:58:35 +00:00
parent 7bc5812ab3
commit c806540943
2 changed files with 22 additions and 1 deletions

View File

@ -280,7 +280,7 @@ function map_meta_cap( $cap, $user_id ) {
case 'term':
$term = get_term( $object_id );
if ( ! $term ) {
if ( ! $term instanceof WP_Term ) {
break;
}

View File

@ -1353,6 +1353,27 @@ class Tests_User_Capabilities extends WP_UnitTestCase {
}
}
/**
* @ticket 40891
*/
public function test_taxonomy_meta_capabilities_with_non_existent_terms() {
$caps = array(
'add_term_meta',
'delete_term_meta',
'edit_term_meta',
);
$taxonomy = 'wptests_tax';
register_taxonomy( $taxonomy, 'post' );
$editor = self::$users['editor'];
foreach ( $caps as $cap ) {
// `null` represents a non-existent term ID.
$this->assertFalse( user_can( $editor->ID, $cap, null ) );
}
}
/**
* @ticket 21786
*/