Разработчики тем могут наконец порадоваться. Впервые появилась возможность передавать данные в шаблоны с помощью различных основных функций загрузки шаблонов. Энрико Сорчинелли объявил об изменении в блоге Make Core в прошлую пятницу.
Первоначально эта функция была предложена Скоттом Кингсли Кларком в 2012 году. За прошедшие годы проект получил десяток исправлений. Он пережил закрытие и споры о том, почему эта функция не должна входить в ядро. Сорчинелли был основным, кто поддерживал проект в течение последних нескольких лет.
Разработчики WordPress убрали некоторые старые, но полезные запросы функций для цикла выпуска 5.5. Пару недель назад был принят билет 11-летней давности, позволяющий пользователям обновлять темы и плагины через ZIP-файл. Разработчики ядра даже закрыли билет 9-летней давности, связанный с взломом Internet Explorer 6 – progress. Однако для авторов тем одним из наиболее важных дополнений является контроль над передачей данных из одного шаблона в другой.
Обычно в PHP переменные могут передаваться из файла в файл, потому что они остаются в той же области. Однако это не тот случай, если включение файла исключено из этой области путем включения файла изнутри функции. Затем объем ограничивается функцией. Так работает система шаблонов в WordPress. Это не обязательно плохо. Однако это означает, что у разработчиков тем не было встроенного метода передачи данных из одного шаблона в другой.
Представьте, что вы создаете переменную в одном шаблоне, но вам нужно получить доступ к той же переменной в подшаблоне. Для этого нет недостатка в методах, но многие из них неэлегантны.
«В течение многих лет разработчикам тем, желающим передать данные в файлы шаблонов, приходилось использовать далеко не идеальные обходные пути», – написал Сорчинелли в объявлении. Худшие решения обычно включали создание глобальной переменной. Другие создали собственные функции загрузки шаблонов поверх существующей системы WordPress. Проблема всех методов, независимо от того, какой из них был идеальным, заключалась в отсутствии стандарта. Каждой теме нужно было бы создать собственное решение, а плагины, затрагивающие интерфейс, часто имели бы конкурирующее решение.
Все функции загрузки шаблонов WordPress теперь поддерживают дополнительный параметр $ args, который позволяет авторам тем передавать ассоциативный массив данных в загруженный шаблон. Этот новый параметр поддерживает следующие функции:
get_header ()
get_footer ()
get_sidebar ()
get_template_part ()
locate_template ()
load_template ()
Любые перехватчики, связанные с функциями, также передают данные.
Функция get_search_form () поддерживает аналогичный параметр, начиная с WordPress 5.2. На практике она должна работать в основном так же, но функция имеет несколько значений по умолчанию, которые она устанавливает.
Дополнительным преимуществом стандартного метода передачи данных в шаблоны является то, что эта функция может быть расширена в будущем. Например, WordPress со временем может предложить ловушку для фильтрации данных, которая может пригодиться с дочерними темами.
Системе шаблонов WordPress по-прежнему не хватает надежности более современных фреймворков, но это простое изменение позволит использовать множество приложений.
Остается один вопрос: не слишком ли поздно появилась эта функция? Поскольку WordPress готовится обновить всю систему тем для интеграции с предстоящей функцией редактирования всего сайта, будет ли эта функция полезна только в ближайшие несколько месяцев?
Даже если большинство разработчиков тем не сразу перейдут на подножку блочных тем еще на год, эта функция может пригодиться, пока они этого не сделают. Возможно, это также будет иметь некоторую полезность за пределами текущей парадигмы тематики.
Разработчики до сих пор не имеют четкого представления о том, как будет выглядеть тематика с блоками в ближайшие несколько лет. Могут возникнуть ситуации, когда передача динамических данных все еще необходима в следующей системе. Даже если нет, вероятно, пройдет много времени, прежде чем массовое принятие блочных тем от существующего сообщества разработчиков тем будет. Между тем, многие смогут отказаться от собственных решений и использовать стандартные функции.