2015-11-30 2 views
1

Я начал разработку пользовательской темы для wordpress, и я заметил очевидную ошибку, которая мне кажется странной, учитывая «размер» и популярность Wordpress.Wordpress непоследовательный синтаксический анализ «имя шаблона: xxx» в файлах шаблонов

Wordpress использует соглашение, чтобы файлы, названные как page_mytemplatename.php, считались «шаблонами страниц» и анализировались для заполнения раскрывающегося списка «Шаблон» в параметрах редактирования страницы.

Известно, предназначенный и документально подтверждено, что писать комментарий в шаблоне страницы файла с указанием

/* Template Name: myCustomTemplateNameHere */ 

говорит WordPress, чтобы добавить «myCustomTemplateNameHere» в раскрывающемся меню.

Теперь ... Я бы предположил, что Wordpress будет достаточно умным, чтобы искать шаблон «Шаблонное имя: xxxx» только в первом комментарии (и только если первый комментарий является первым делом в файле .php !), но вместо этого я обнаружил, что пишу «имя шаблона: xxxxxxx» где-то в ЛЮБОЙ шаблон ИЛИ в любом файле, который ВКЛЮЧЕН с помощью директивы 'include' или 'require', заставляет wordpress фактически заполнять меню с помощью мусора, который хранится после двоеточия , даже сам php-код!

, например, заявление, как это, в середине файла, даже косвенно, включенным «включают» директивы

echo "current template name: " . $tpl_name; 

вызовет появление "$ tpl_name;.! Шаблона в раскрывающемся списке

на мой взгляд, это кажется совершенно unckecked и может привести к проблемам безопасности в WordPress! это потенциально может привести к какой-то инъекции, даже ты, я должен признать, что это было бы сложно попасть ...

в любом случае , тот факт, что мы, похоже, не бесплатно, чтобы написать комментарий как

/* writing template name: namehere would cause wordpress to populate a dropdown */ 

или даже писать код, содержащий последовательность символов «Название шаблона: хххх» фактически не вызывает побочный эффект звучит как ошибка для меня.

также, я заметил, что это происходит даже в том случае, если имя шаблона: xxxx написано внутри включенных или необходимых файлов ... почему это происходит. делает ли wordppress синтаксический анализ ВСЕХ файлов или даже ищет включает и анализирует включенные файлы? это показалось бы сложным и ужасно неправильным для меня!

Мне удалось показать свою точку зрения?

Я бегу WordPress 4.3.1 (довольно много позднее на момент написания этой статьи)

может кто-то подтвердить, что это ошибка, я должен иметь в виду, в то время как я пишу мою тему?

спасибо.

ответ

1

Я провел несколько экспериментов в WordPress 4.3.1, и следующие мои результаты:

Как и предполагалось/можно было бы ожидать, комментарии в этой форме, в любом месте на странице:

<?php 
/** 
* Template Name: $foobar; 
*/ 
?> 

результат: ли получить перечисленные в качестве шаблона

прямой HTML в шаблоне страницы:

template name: foobar 

результат: ли получить Liste d в качестве шаблона

PHP код в качестве комментария, например, так:

<?php 
/** 
* echo 'Template Name:' . $foobar; 
*/ 
?> 

Результат: делает получить перечисленные в качестве шаблона

PHP код не в качестве комментария, например, так:

<?php 

echo 'Template Name:' . $foobar; 

?> 

результат: Удивительно, что эти данные перечислены как шаблон (указанное имя шаблона:)

Рассматривая ядро ​​WP код, который разбирает шаблоны, он загружает все .php файлов в теме, а затем ищет следующее регулярное выражение в содержании PHP:

preg_match('|Template Name:(.*)$|mi', file_get_contents(...)) 

Вывод:

  1. Это, очевидно, способ написания кода для работы.
  2. Это, вероятно, не ошибка. Как проблематично перечислять файлы в раскрывающемся списке «Выбор шаблона», которые не являются шаблонами?
  3. Избегайте использования этой ключевой фразы в ваших файлах («Имя шаблона:»), и в раскрывающемся списке будет показано неправильное имя шаблона.
+0

Вы правы, это, очевидно, способ написания кода ... Я все еще подозреваю, что такое поведение можно считать непоследовательным. это «не ошибка», что в раскрывающемся списке «Выбор шаблона» есть записи, которые не являются шаблонами? ... это звучит противоречиво для меня. Ключевая фраза «Имя шаблона:» не документирована как запрещенная, но ее использование позволяет выбирать несуществующие шаблоны, которые, в свою очередь, заставляют страницу показывать белые без ошибок. WP является популярной CMS, если все функции были написаны таким образом, это было бы полным беспорядком. Вам не кажется, что стоит опубликовать отчет об ошибке в команде WP dev? – Leo128

+0

@ Leo128- Я бы сказал, иди за ним. Мне было бы интересно посмотреть, что они говорят/делают с ним. –

+0

O 'the lally ... Мне не удалось получить учетную запись в wordpress trac. для этого требуется учетная запись на wordpress.org, но, верите в это или нет, получение одного - определенно не тривиальная задача. Может ли кто-нибудь отправить отчет об ошибке от моего имени? или предложить альтернативный маршрут? Спасибо – Leo128