forked from WordPress/wordpress-develop
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Media: Introduce
wp_get_attachment_link_attributes
filter.
This changeset introduces the `wp_get_attachment_link_attributes` hook to allow developers to filter the link attributes when getting the attachment link. Props NathanAtmoz, aaroncampbell, antpb, costdev. Fixes #41574. git-svn-id: https://develop.svn.wordpress.org/trunk@55262 602fd350-edb4-49c9-b593-d223f7449a82
- Loading branch information
Showing
2 changed files
with
124 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
<?php | ||
|
||
/** | ||
* @group post | ||
* @group media | ||
* @group upload | ||
* | ||
* @covers ::wp_get_attachment_link | ||
*/ | ||
class Tests_Post_WpGetAttachmentLink extends WP_UnitTestCase { | ||
|
||
/** | ||
* The ID of an attachment for testing. | ||
* | ||
* @var int $attachment | ||
*/ | ||
private static $attachment; | ||
|
||
/** | ||
* Creates an attachment for testing before any tests run. | ||
*/ | ||
public static function set_up_before_class() { | ||
parent::set_up_before_class(); | ||
|
||
self::$attachment = self::factory()->attachment->create(); | ||
} | ||
|
||
/** | ||
* Tests that wp_get_attachment_link() applies the | ||
* wp_get_attachment_link_attributes filter. | ||
* | ||
* @ticket 41574 | ||
* | ||
* @dataProvider data_should_apply_attributes_filter | ||
* | ||
* @param array $attributes Attributes to return from the callback. | ||
* @param string $expected The substring expected to be in the attachment link. | ||
*/ | ||
public function test_should_apply_attributes_filter( $attributes, $expected ) { | ||
$expected = str_replace( 'ATTACHMENT_ID', self::$attachment, $expected ); | ||
|
||
add_filter( | ||
'wp_get_attachment_link_attributes', | ||
static function( $attr ) use ( $attributes ) { | ||
return array_merge( $attr, $attributes ); | ||
} | ||
); | ||
|
||
$this->assertStringContainsString( | ||
$expected, | ||
wp_get_attachment_link( self::$attachment ) | ||
); | ||
} | ||
|
||
/** | ||
* Data provider for test_should_apply_attributes_filter(). | ||
* | ||
* @return array[] | ||
*/ | ||
public function data_should_apply_attributes_filter() { | ||
return array( | ||
'no new attributes' => array( | ||
'attributes' => array(), | ||
'expected' => "<a href='http://example.org/?attachment_id=ATTACHMENT_ID'>", | ||
), | ||
'one new attribute' => array( | ||
'attributes' => array( | ||
'class' => 'test-attribute-filter', | ||
), | ||
'expected' => " class='test-attribute-filter'", | ||
), | ||
'two new attributes' => array( | ||
'attributes' => array( | ||
'class' => 'test-attribute-filter', | ||
'id' => 'test-attribute-filter-1', | ||
), | ||
'expected' => " class='test-attribute-filter' id='test-attribute-filter-1'", | ||
), | ||
'an existing attribute' => array( | ||
'attributes' => array( | ||
'href' => 'http://test-attribute-filter.org', | ||
), | ||
'expected' => " href='http://test-attribute-filter.org'", | ||
), | ||
'an existing attribute and a new attribute' => array( | ||
'attributes' => array( | ||
'href' => 'http://test-attribute-filter.org', | ||
'class' => 'test-attribute-filter', | ||
), | ||
'expected' => " href='http://test-attribute-filter.org' class='test-attribute-filter'", | ||
), | ||
'an attribute name with unsafe characters' => array( | ||
'attributes' => array( | ||
"> <script>alert('Howdy, admin!')</script> <a href=''></a" => '', | ||
), | ||
'expected' => " > <script>alert('Howdy, admin!')</script> <a href=''></a=''", | ||
), | ||
'an attribute value with unsafe characters' => array( | ||
'attributes' => array( | ||
'class' => "'> <script>alert('Howdy, admin!')</script> <a href=''></a", | ||
), | ||
'expected' => ''> <script>alert('Howdy, admin!')</script> <a href=''></a', | ||
), | ||
); | ||
} | ||
} |