diff --git a/src/wp-includes/link-template.php b/src/wp-includes/link-template.php index 9df41fbee8..c58ee26d0f 100644 --- a/src/wp-includes/link-template.php +++ b/src/wp-includes/link-template.php @@ -903,14 +903,18 @@ function edit_tag_link( $link = '', $before = '', $after = '', $tag = null ) { * @param string $taxonomy Taxonomy. * @param string $object_type The object type. Used to highlight the proper post type menu on the linked page. * Defaults to the first object_type associated with the taxonomy. - * @return string The edit term link URL for the given term. + * @return string|null The edit term link URL for the given term, or null on failure. */ function get_edit_term_link( $term_id, $taxonomy, $object_type = '' ) { $tax = get_taxonomy( $taxonomy ); - if ( !current_user_can( $tax->cap->edit_terms ) ) + if ( ! $tax || ! current_user_can( $tax->cap->edit_terms ) ) { return; + } $term = get_term( $term_id, $taxonomy ); + if ( ! $term || is_wp_error( $term ) ) { + return; + } $args = array( 'action' => 'edit', diff --git a/tests/phpunit/tests/term/getEditTermLink.php b/tests/phpunit/tests/term/getEditTermLink.php new file mode 100644 index 0000000000..efc6c0b863 --- /dev/null +++ b/tests/phpunit/tests/term/getEditTermLink.php @@ -0,0 +1,54 @@ +factory->user->create( array( 'role' => 'administrator' ) ) ); + register_taxonomy( 'wptests_tax', 'post' ); + } + + public function test_get_edit_term_link_default() { + $term1 = $this->factory->term->create( array( + 'taxonomy' => 'wptests_tax', + 'name' => 'foo', + ) ); + + $actual = get_edit_term_link( $term1, 'wptests_tax' ); + $expected = 'http://example.org/wp-admin/edit-tags.php?action=edit&taxonomy=wptests_tax&tag_ID=' . $term1 . '&post_type=post'; + $this->assertEquals( $expected, $actual ); + } + + /** + * @ticket 32786 + */ + public function test_get_edit_term_link_invalid_id() { + $term1 = $this->factory->term->create( array( + 'taxonomy' => 'wptests_tax', + 'name' => 'foo', + ) ); + + $actual = get_edit_term_link( 12345, 'wptests_tax' ); + $this->assertNull( $actual ); + } + + /** + * @ticket 32786 + */ + public function test_get_edit_term_link_empty_id() { + $actual = get_edit_term_link( '', 'wptests_tax' ); + $this->assertNull( $actual ); + } + + /** + * @ticket 32786 + */ + public function test_get_edit_term_link_bad_tax() { + $actual = get_edit_term_link( '', 'bad_tax' ); + $this->assertNull( $actual ); + } + + +}