2016-06-01 4 views
2

Простой вопрос. В шаблоне Wordpress есть причина, по которой я не должен использовать include() и использовать get_footer()?Использование include() вместо get_footer()

Предположим, что у меня есть подпапка в каталоге шаблонов со всеми включенными мной компонентами. Кажется, это работает нормально, но, может быть, я что-то упустил.

ответ

3

Вы не должны использовать include() в вашей теме Wordpress.

Причина в том, что архитектура Wordpress очень подключаема - по всему ядру, плагинам и темам большинство компонентов могут взаимодействовать с другими компонентами через actions и filters.

Хотя get_footer() может показаться простым, функции, которые он запускает, позволяют частично отменить части вашей темы. В этом случае locate_template() позволяет дочерней теме отправляться с файлом footer.php, чтобы переопределить тот, который настроен вашей основной темой.

Кроме того, сама get_footer() позволяет гибкость в том числе несколько файлов колонтитула в вашей теме Wordpress, так что вы можете назвать несколько другой колонтитул на определенном шаблоне, если вам нужно (путем, например, get_footer('alternative') называть footer-alternative.php -., Который затем также переопределяется дочерней темой).


Стоит отметить, что вы должны также обеспечить шаблон нижнего колонтитула имеет вызов wp_footer() в нем - в идеале непосредственно перед </html> тега. Это связано с тем, что я упомянул выше о действиях и фильтрах: в этом случае любые функции, подключенные к нижнему колонтитулу плагинами или ядром Wordpress (например, сценарий), будут запускаться по назначению (кстати, get_footer() сам также выполняет действие get_footer, который позволяет, например, плагину переопределить, какой шаблон нижнего колонтитула вызывается - это, таким образом, является еще одной причиной использования get_footer()).

Наконец, в связи с не использованием include() в вашей теме на всех, если вы окажетесь необходимости включить другой файл шаблон, который не является колонтитулы, get_template_part() существует для этого. Хотя иногда кажется, что проще просто использовать собственные функции PHP, а не оболочки, которые предоставляет архитектура Wordpress, в конце концов это означает, что «Wordpress way» означает, что ваша тема будет лучше взаимодействовать с плагинами и будущими версиями Core, а также быть более удобной для обслуживания другими. И, вероятно, вы, вероятно, избегаете появления слишком странных ошибок для себя!

+0

Спасибо за ответ.Если бы я хотел использовать get_template_part() и get_footer(), есть ли способ отправки в него переменных? Функции? Singleton? Что делать, если вы не создаете тему для продажи или повторного использования, и это одноразовая сделка? –

+1

Любой может столкнуться с этим вопросом Q & A (и Q & A для StackOverflow должны быть широко применимы), поэтому лучше всего отнести вас к лучшей практике. В конце концов, вы все равно можете делать все, что захотите, будь то тема одноразового использования или нет;) Тем не менее, это «способ Wordpress», вероятно, сохранит ваши проблемы позже. В отношении отправки переменных в [этот ответ на WPSE] (http://wordpress.stackexchange.com/questions/176804/passing-a-variable-to-get-template-part) объясняется, как это сделать. –

+0

@JamesHeazlewood На самом деле вы также можете использовать глобальную переменную ... хотя, как правило, это не очень хороший PHP, Wordpress (и его плагины) работают в основном в глобальном пространстве имен, так что это необязательно делать не-Wordpress. Просто убедитесь, что он назван достаточно однозначно и т. Д. –

2

get_footer() (ссылка для источника) не делает ничего более фона в фоновом режиме, а не находит и включает файл в любом случае.

get_footer() затем вызывает locate_template(), который затем вызывает load_template(), который только делает: require_once($template_file)

Это до ваших предпочтений, но рекомендовал бы использовать get_footer() в случае, если что-то делает изменения в будущем

+1

Это немного некорректно. Использование get_footer() позволяет дочерней теме заменить нижний колонтитул, введенный родительской темой (через логику местоположения темы в 'locate_template()'). Я добавил ответ, который адресован и расширяет его. –

+0

Спасибо за указание, что я видел это в DocBlock, но не обращал на него внимания: D – zanderwar

Смежные вопросы