Themes: Make sure get_file_data() recognizes headers prefixed by <?php tag.

This allows for using headers in the format of `<?php // Template Name: Something ?>`, which previously could not be recognized correctly.

Props dd32, m_uysl, thomas-vitale, boblinthorst.
Fixes #33387.

git-svn-id: https://develop.svn.wordpress.org/trunk@51182 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2021-06-18 14:02:44 +00:00
parent 1f0cdc6f3b
commit 2816e8b876
4 changed files with 27 additions and 4 deletions

View File

@ -6287,7 +6287,7 @@ function get_file_data( $file, $default_headers, $context = '' ) {
}
foreach ( $all_headers as $field => $regex ) {
if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] ) {
if ( preg_match( '/^(?:[ \t]*<\?php)?[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] ) {
$all_headers[ $field ] = _cleanup_header_comment( $match[1] );
} else {
$all_headers[ $field ] = '';

View File

@ -0,0 +1 @@
<?php // Template Name: Something ?>

View File

@ -44,16 +44,18 @@ class Tests_File extends WP_UnitTestCase {
}
/**
* @ticket 19854
* @group plugins
* @group themes
*/
function test_get_file_data_cr_line_endings() {
$headers = array(
function test_get_file_data_with_cr_line_endings() {
$headers = array(
'SomeHeader' => 'Some Header',
'Description' => 'Description',
'Author' => 'Author',
);
$actual = get_file_data( DIR_TESTDATA . '/formatting/cr-line-endings-file-header.php', $headers );
$actual = get_file_data( DIR_TESTDATA . '/formatting/file-header-cr-line-endings.php', $headers );
$expected = array(
'SomeHeader' => 'Some header value!',
'Description' => 'This file is using CR line endings for a testcase.',
@ -65,6 +67,26 @@ class Tests_File extends WP_UnitTestCase {
}
}
/**
* @ticket 47186
* @group plugins
* @group themes
*/
function test_get_file_data_with_php_open_tag_prefix() {
$headers = array(
'TemplateName' => 'Template Name',
);
$actual = get_file_data( DIR_TESTDATA . '/formatting/file-header-php-open-tag-prefix.php', $headers );
$expected = array(
'TemplateName' => 'Something',
);
foreach ( $actual as $header => $value ) {
$this->assertSame( $expected[ $header ], $value, $header );
}
}
function is_unique_writable_file( $path, $filename ) {
$fullpath = $path . DIRECTORY_SEPARATOR . $filename;