it-swarm.com.ru

PHP код в шаблоне страницы против функций

Я создал множество сайтов на WordPress и научился PHP практикам, которые я считаю верными, т.е. функции идут в файле functions.php, почти все в functions.php должно быть заключено в функцию, шаблоны страниц прямо в них PHP и ​​т. д.

Но я немного шатаюсь по поводу "почему". Что такого в шаблонах страниц по сравнению с файлом функций, который меняет то, что работает и не работает в каждом? Я предполагаю, что это порядок загрузки, но любые более продвинутые указания/направления будут оценены.

Edit - Хорошо, я понимаю аспект "лучших практик". Функции предназначены для повторного использования и т.д. Я больше смотрю на технические причины, когда/почему это не работает.

7
tmdesigned

Несмотря на отсутствие "официальных" ответов, этот вопрос все еще довольно популярен, поэтому через год я опубликую свои твердые мысли по этому поводу.

Что привело к этому вопросу, так это опыт работы кода в некоторых местах, а не в других. Например, почему я должен был обернуть код внутри функции в functions.php вместо простого размещения его там, в то время как я смог сохранить его свободно в файле шаблона? Мне казалось, что существует фундаментальное различие в том, как WordPress обрабатывает код в разных местах.

Но, конечно, это не точно. PHP - это PHP, и WordPress просто весело продвигается вперед, строка за строкой.

Основное отличие, как я написал в своем первоначальном вопросе и, как подтвердил Кшишек и другие, заключается в порядке загрузки. Но порядок загрузки в WordPress - это все.

Функциональный файл темы загружен, условно говоря, очень в начале. Это все еще очень на подготовительном этапе. Ключевые функции WordPress готовы, такие как add_action (), как плагины и глобальные переменные. Но он еще не готов начать делать вещи. Вывод страницы еще не записан, основной цикл не запущен и т.д.

Так что если вы поместите свободную строку кода, чтобы сделать что-то "сейчас" в functions.php, это, вероятно, слишком рано. Вместо этого свободные строки кода здесь должны быть подготовительными по своему характеру, то есть "Делать это позже" или "Вот константа для позже", или, как следует из названия файла, "Вот функция, которую нужно запустить позже".

Файлы шаблонов, с другой стороны, запускаются относительно поздно. WordPress так долго находится в процессе загрузки, что у него достаточно информации, чтобы выбрать правильный файл шаблона для запроса пользователя. Практически любой свободный код имеет здесь смысл, потому что мы приближаемся к концу цикла. Все остальное настроено, и мы уже создаем наш результат.

Учитывая все это, все начинает фокусироваться. Почему синтаксическая ошибка в functions.php вызывает белый экран смерти, а синтаксическая ошибка в файле шаблона просто пробивает страницу на полпути? Поскольку functions.php выполняется перед любым выводом, поэтому ошибка ломает вещи, прежде чем что-либо показывать, но файл шаблона может быть на полпути через вывод.

Так что все сводится к последовательности, но гораздо глубже, чем я думал.

постскриптум Что помогло мне лучше понять это за последний год, так это (а) лучшее понимание порядка загрузки, полученного при пошаговом выполнении последовательности загрузки с помощью xDebug, буквальное наблюдение за тем, как все разворачивается, и (б) более глубокое понимание хуков. Поскольку порядок загрузки очень важен в WordPress, система перехватов имеет решающее значение. Это как путешествие во времени для вашего кода.

2
tmdesigned