Allow `is_page_template()` to accept an array, as many other conditional tags do.

props morganestes, tyxla, DrewAPicture.
fixes #31271.


git-svn-id: https://develop.svn.wordpress.org/trunk@31754 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Helen Hou-Sandi 2015-03-12 16:27:06 +00:00
parent a2abc13285
commit 21134a0c89
2 changed files with 40 additions and 3 deletions

View File

@ -1629,12 +1629,13 @@ function get_the_password_form( $post = 0 ) {
* Whether currently in a page template.
*
* This template tag allows you to determine if you are in a page template.
* You can optionally provide a template name and then the check will be
* specific to that template.
* You can optionally provide a template name or array of template names
* and then the check will be specific to that template.
*
* @since 2.5.0
* @since 4.2.0 The `$template` parameter was changed to accept an array of page templates.
*
* @param string $template The specific template name if specific matching is required.
* @param string|array $template The specific template name or array of templates to match.
* @return bool True on success, false on failure.
*/
function is_page_template( $template = '' ) {
@ -1649,6 +1650,14 @@ function is_page_template( $template = '' ) {
if ( $template == $page_template )
return true;
if ( is_array( $template ) ) {
if ( ( in_array( 'default', $template, true ) && ! $page_template )
|| in_array( $page_template, $template, true )
) {
return true;
}
}
if ( 'default' == $template && ! $page_template )
return true;

View File

@ -960,4 +960,32 @@ class Tests_Query_Conditionals extends WP_UnitTestCase {
$this->assertFalse( $q->is_page( $p2_name ) );
$this->assertFalse( $q->is_page( $p2 ) );
}
function test_is_page_template() {
$post_id = $this->factory->post->create( array( 'post_type' => 'page' ) );
update_post_meta($post_id, '_wp_page_template', 'example.php');
$this->go_to( "/?page_id=$post_id" );
$this->assertTrue( is_page_template( 'example.php' ) );
}
/**
* @ticket 31271
*/
function test_is_page_template_default() {
$post_id = $this->factory->post->create( array( 'post_type' => 'page' ) );
$this->go_to( "/?page_id=$post_id" );
$this->assertTrue( is_page_template( 'default' ) );
$this->assertTrue( is_page_template( array( 'random', 'default' ) ) );
}
/**
* @ticket 31271
*/
function test_is_page_template_array() {
$post_id = $this->factory->post->create( array( 'post_type' => 'page' ) );
update_post_meta($post_id, '_wp_page_template', 'example.php');
$this->go_to( "/?page_id=$post_id" );
$this->assertFalse( is_page_template( array( 'test.php' ) ) );
$this->assertTrue( is_page_template( array('test.php', 'example.php') ) );
}
}