Wordpress подключить файл с функциями
При работе с темами, плагинами и вообще с любым кодом WordPress, включая хаки в популярном файле темы functions.php . Хорошо бы знать в какой последовательности подключаются php файлы движка, когда срабатывают важные хуки и какие важные константы определены. В этой статье поговорим о такой последовательности загрузки.
Примеры
Чтобы было понятнее, возьмем простую задачу: нам нужно подключить какой-то код в админ-панели WordPress и только там - код не должен срабатывать во фронте или при AJAX запросах. Кто-то скажет, что достаточно сделать проверку с помощью is_admin(), однако это не так, потому что is_admin() вернет true и при AJAX запросе в файл admin-ajax.php .
Или например, можно подключить какую-то логику на хук admin_init и потом долго недоумевать, а почему моя логика работает и при запросах AJAX. Или почему она мешает плагинам, которые работают с AJAX.
Или вот еще пример из комментария. Когда в файле темы functions.php выполняется какой-то код, который зависит от другого кода подключаемого через хук init. Например, вы создали тип записи во время хука init и в самом файле functions.php выполняете проверку, которая опирается на этот новый тип записи и ожидаете что код будет работать, но это не так, потому что прямой код в functions.php срабатывает раньше чем событие init .
Таких примеров можно привести много. Но чтобы так не ошибаться, нужно разобраться и понять последовательность загрузки ядра WordPress. Этим мы и займемся.
- Порядок загрузки (теория)
- Загрузка ядра WordPress
- Загрузка Фронт-энда (темы)
- Загрузка REST запроса
- Загрузка Админки
- Загрузка AJAX запроса
- Занимательная картинка о том, как загружается WordPress
Как вывести все изображения из произвольной папки без плагинов в WordPress
При разработке своих сайтов вам может понадобиться вывести галереи изображений из произвольных папок без их загрузки в библиотеку. Давайте рассмотрим пример, как это сделать с помощью шорткода: Использование: [folder-gallery path=’/data/images/’] Как видите, функция принимает путь до искомой папки (обязательно с открывающим и закрывающим слешем), в функции устанавливаются разрешенные типы изображений и формируется вывод с классами…
На эту тему написано уже десятки статей, но тема продолжается обсуждаться, а в чатах и на форумах люди снова и снова задают вопросы и сталкиваются с проблемами. Давайте вместе попробуем на примерах разобраться как же правильно подключать стили и скрипты в WordPress.
Начнем по порядку. Есть хук wp_enqueue_scripts , который срабатывает в момент подключения в очередь на вывод файлов стилей и скриптов. Это событие срабатывает в момент хука wp_head с приоритетом 1. Учтите, что для его работы в файле header.php необходима функция wp_head() .
На этот хук wp_enqueue_scripts принято вешать функции, которые подключают стили и скрипты темы с помощью функций wp_enqueue_style() и wp_enqueue_script() соответственно.
Простой способ подключения может выглядеть следующим образом:
Заметьте, что если в функции присутствует префикс get_template_ , то будет подключен файл из родительской темы, если же префикс get_stylesheet_ , то файл будет подключен из дочерней темы только в том случае, если дочерняя тема активирована (если не активирована, файл подключается из родительской).
Загрузка AJAX запроса
Отправлять AJAX запросы принято в файл wp-admin/admin-ajax.php, с него и начинается загрузка WordPress при AJAX запросах.
Давайте и тут разберем порядок загрузки, а затем немного пояснений.
При AJAX запросе также устанавливается константа WP_ADMIN . Это значит, что любой AJAX запрос выглядит для ядра, как запрос в админ часть, даже если этот запрос делается с фронта. Это не всегда нужно, но так принято в WordPress по причинам стандартизации и удобства использования.
Далее загружается ядро, в котором срабатывают все хуки. Т.е. подключаются и запускаются все плагины, срабатывает код файла functions.php , срабатывает событие init . Т.е. полностью загружается и обрабатывается ядро WordPress.
Теперь, когда ядро обработано, дополнительно подключаются все PHP функции админ-панели (хотя часто они не нужны) и запускается один из AJAX хуков (зависит от авторизации): wp_ajax_(action) или wp_ajax_nopriv_(action) .
Запуск AJAX хука это последний этап - AJAX операция выполнена и она должна прервать работу PHP и вывести на экран какие-либо данные - обычно это либо просто строка, либо строка в json формате.
Кстати, для удобного json ответа при AJAX запросах в WP есть специальная функция - wp_json_encode() и две функции производные от нее:
В WordPress одна из распространенных проблемных ситуаций — это правильный способ включения внешних файлов.
PHP предлагает четыре (!) Способа сделать это, а WordPress даже предлагает свой вариант.
В этой статье мы рассмотрим эти способы, а также рекомендации по использованию каждого из них.
Ошибки в functions.php при вставке кода
Неоднократно встречал вопросы об ошибках, вроде: "После установки кода в файл functions.php сайт перестал работать - белый экран. Что делать?". Я и сам с подобным сталкивался когда-то.
Для меня некоторые решения этой проблемы, долгое время, оставались загадкой — вроде ничего не делал, и даже танца с бубном не было, но - раз и все заработало. Почему так происходит? Давайте рассмотрим возможные ситуации из-за которых может "ломаться" сайт и их объяснение:
Вставляете готовый код — сайт перестает работать.
Чаще всего, дело в открывающем и закрывающем тегах PHP . Обычно, если вставляемый код имеет в начале и в конце эти теги, то их нужно удалить. Также, файл functions.php не должен выводить на экран никакой текст (HTML код или другой контент). Вывод текста допускается только внутри функции, которые в дальнейшем будут использоваться в шаблоне или которые прикрепляются к хукам (подробнее см. ниже).
Добавить комментарий Отменить ответ
Порядок загрузки (теория)
Понять логику загрузки не так сложно, как может показаться на первый взгляд. Для этого давайте взглянем на эту, столь любимую мной, картинку:
Существует 4 варианта загрузки. На самом деле их чуть больше, но это основные:
- Загрузка Фронтэнда (темы).
- Загрузка REST запроса.
- Загрузка Админки.
- Загрузка AJAX запроса (admin-ajax.php).
Во всех случаях загружается ядро WordPress - файл wp-load.php . Ядро загружается всегда и везде!
Прежде чем переходить к каждому типу загрузки, нужно разобраться как загружается само ядро.
Для чего на самом деле нужен functions.php
Как я писал выше: functions.php необходим для того, чтобы расширить функциональность темы и только для этого! В этот файл нужно добавлять всякий код, который нужен для шаблона непосредственно, но не для сайта в целом.
Если на каком-либо ресурсе вам предлагают добавить код в файл functions.php , а функция кода не относится к шаблону непосредственно, то не ленитесь сделайте плагин из этого кода и возможно в будущем избежите неожиданной пропажи добавленного ранее функционала.
include_once()
Согласно руководству по PHP: include_once() будет выполнять то же поведение, что и include() , но не будет включать файл снова, если он уже был включен.
Функция include_once() похожа на include() , но между ними есть некоторые ключевые отличия.
Во-первых, в то время как include_once() во многом работает так же, как include() , она не позволит вам снова включить скрипт. Это означает, что если где-то еще в вашем проекте уже был включен этот внешний файл, второй раз он подключен не будет.
Так в чем преимущество этого? Помимо гарантии того, что скрипт находится только в одном месте, это также гарантирует, что переменные и функции не обязательно будут переопределены. Напомним, что при использовании include() скрипты имеют доступ к функциям и переменным, которые определены перед ними.
Если вы решите определить новый набор переменных или функций в файле, то вы рискуете переопределить функции и переменные файла, подключенного через include() , которые потенциально могут вызвать серьезные проблемы с выполнением вашего код.
Как создать AJAX-форму на WordPress без плагинов
WordPress имеет достаточно простую методологию обработки Ajax-запросов. Ajax-запросами называют такие запросы, которые происходят без перезагрузки страницы и в результате работа с сайтом становится быстрее и удобнее для конечного пользователя. Заранее оговорюсь, что в репозитории WordPress существуют десятки нормальных плагинов для работы с формами. С помощью них можно настроить поля, их валидацию, содержимое, интегрировать поддержку Ajax,…
Разработка сайтов для бизнеса
Если у вас есть вопрос, на который вы не знаете ответ — напишите нам, мы поможем разобраться. Мы всегда рады интересным знакомствам и новым проектам.
WordPress имеет достаточно простую методологию обработки Ajax-запросов. Ajax-запросами называют такие запросы, которые происходят без перезагрузки страницы и в результате работа с сайтом становится быстрее и удобнее для конечного пользователя.
В конце концов плагин может просто не подходить под ваши задачи. Поэтому в этом материале мы на примере разберемся, как создать простую AJAX-форму в WordPress.
Создание скрипта
Добавить комментарий Отменить ответ
require_once()
Согласно руководству по PHP: require_once() работает так же, как require() , но не будет включать файл во второй раз, если он уже включен.
Это, вероятно, легче всего понять, поскольку мы рассмотрели последние три функции относительно подробно. Проще говоря, require_once() выполняет те же функции, что и require() , но не будет пытаться снова включить файл, если он уже загружен в ваш скрипт.
Как добавить один скрипт после другого
Еще, при работе со скриптами полезно знать, что в третьем параметре функции wp_enqueue_script() можно указать зависимость этого скрипта от других. Например, если вы укажите array('jquery') , то скрипт example.min.js будет подключен после скрипта jquery.min.js.
Кроме того, существует полезная функция wp_add_inline_script() , которая позволит вам добавить скрипт прямо в html документ, после указанного. Аналогично для стилей будет работать функция wp_add_inline_style() . Рассмотрим пример подключения slick-слайдера:
Как видите, сначала нужные файлы подключаются с помощью функций wp_enqueue_style() и wp_enqueue_script() , после чего скрипт инициализации слайдера вставляется с помощью wp_add_inline_script() после основного slick.min.js.
Чтобы не было ошибок, учитывайте 4 момента:
Пример, у нас была такая структура:
Если Вы добавили php код так, то это вызовет ошибку или, что еще хуже, белый экран, когда показ ошибок отключен:
Такой код вызовет ошибку:
Логичнее его записать так:
Бывает что перенос строки ставят в самом конце functions.php, вот тогда это становится настоящей проблемой, потому что все казалось бы правильно, но сайт не работает. На самом деле после ?> или до
По этой причине многие разработчики вообще удаляют закрывающий тег ?> , это допустимо для PHP. Рекомендую всегда делать именно так:
Если в functions.php присутствует функция, то внутри этой функции можно использовать теги , например, для того, чтобы визуально выделить HTML код внутри функции:
Еще одна заметка касательно файла functions.php: устанавливайте файлу кодировку UTF-8 (UTF-8 без BOM). Иначе, если функции в файле будет текст на кириллице, то он выведется непонятными символами: кракозябрами, каракулями - называйте как хотите.
Как сделать подключение скриптов по условию
При подключении скриптов и стилей на хуке wp_enqueue_scripts глобальные переменные уже определены, поэтому все условные теги вида is_home() , is_front_page() , is_archive() , is_page() и подобные будут работать. В примере ниже мы подключаем на главную одну таблицу стилей, а на страницу категорий другую. Общий файл стилей будет подключен на все страницы сайта.
Создание формы
Для начала мы создадим и выведем простую html-форму на странице. Она может выводиться как напрямую в каком-либо шаблоне, так и подключаться с помощью хука или шорткода в нужном месте.
Загрузка Админки
Админка WordPress никак не связана с «корневым» файлом index.php . Вся её загрузка начинается с файла wp-admin/admin.php.
Первое и главной что там происходит - это определяется константа WP_ADMIN , которая говорит всему коду который выполняется потом, что мы находится в админке.
Как сделать webp без плагинов в WordPress
WebP — это современный формат сжатия изображений без потери качества, который напрямую влияет на скорость загрузки сайта. Конвертирование изображений из jpg и png в формат webp может дать существенный прирост в баллах по google page speed. Формат webp поддерживается большинством современных браузеров. Вы без труда можете найти плагины, которые помогут вам автоматически конвертировать изображения, добавленные…
- 6 сентября, 2021
- 2-3 мин.
- 378
get_template_part()
WordPress предлагает функцию get_template_part() , которая является частью собственного API и используется специально для повторного использования разделов или шаблонов кода в вашей теме.
Функция принимает два аргумента:
- Первый аргумент — это ярлык для шаблона. В приведенном примере это будет «loop».
- Второй аргумент — это имя шаблона. В приведенном выше примере это будет «standard».
С версии WordPress 5.5.0 принимает третий параметр — переменную, которую можно использовать, чтобы пробрасывать данные в шаблон, например:
Теперь в этом файле можно получить указанные параметры через переменную $args.
Загрузка ядра WordPress
Ядро WP загружается при любом запросе: фронт, аякс, админка, REST .
При загрузки ядра всегда подключаются файл темы functions.php , даже в админке. Т.е. не важно, нужна нам тема или нет, functions.php работает и поэтому его можно поставить в один ряд с плагинами. Сделано так для удобства, чтобы любой код можно было «сунуть» в наш, потому и любимый, файл functions.php . Такое поведение не логично с точки зрения программирования, но очень удобно с точки зрения разработки.
Ядро, как мы видим, находится в файле wp-settings.php , но перед ним вызывается wp-load.php . Нужно это для того, чтобы найти файл wp-config.php . Дело в том, что wp-config.php может находится в одной папке со всеми файлами wordPress, а может быть вынесен в родительскую папку. Задача wp-load.php отыскать файл конфигурации и подключить его . Если его нигде нет, то WP предложит его создать. Собственно, ровно это происходит при установке WordPress.
После того, как файл конфигурации найден, он подключается. В нем указываются все важные константы, параметры подключения к базе данных и т.д. И затем подключается ядро - файл wp-settings.php .
Загрузка REST запроса
REST запрос на 90% обрабатывается также как и запрос для фронтенда. Его также начинает обрабатывать файл index.php . Через правила перезаписи (ЧПУ) устанавливается параметр запроса rest_route=маршрут .
Процесс загрузки REST запроса выглядит так:
Пояснения к работе wp() и хуку parse_request
Функция wp() вызывает метод WP::main(), он делает следующие действия по порядку:
Этот метод устанавливает текущего пользователя для обычных (не REST) запросов. см. wp_get_current_user().
Позднее (если это REST запрос), на хуке аутентификации rest_authentication_errors авторизованный юзер будет обнулен при неправильном nonce коде. Смотрите:
Этот метод устанавливает параметры текущего запроса $wp->query_vars .
В конце WP::parse_request() срабатывает хук parse_request на котором всегда висит функция rest_api_loaded():
rest_api_loaded() проверяет параметр запроса $GLOBALS['wp']->query_vars['rest_route'] . Если это REST запрос, то запускается логика REST (логика обработки запросов для обычных страниц тут заканчивается).
Устанавливается константа define( 'REST_REQUEST', true ) .
Запускается REST сервер rest_get_server().
При запуске срабатывает хук rest_api_init. На нём в имеющийся сервер добавляются свои маршруты.
При обработке запроса проверяется доступность текущего маршрута, маршрут обрабатывается, возвращается ответ REST сервера в виде объекта WP_REST_Response.
При обработке запроса срабатывают следующие полезные хуки (в указанном порядке):
Таким образом
За обработку REST запроса отвечает функция rest_api_loaded().
REST запрос выглядит точно также как обычный фронтэнд запрос. До момента установки основного запроса WordPress функцией wp() . В ней как и в обычном фронтэнд запросе устанавливается текущий юзер. Но:
- НЕ устанавливаются заголовки WP::send_headers() .
- НЕ происходит основного запроса WP::query_posts() .
- НЕ обрабатывается 404 страница WP::handle_404() .
- НЕ вызывается файл template-loader.php , который определяет шаблон страницы.
- НЕ работает хук редиректов template_redirect .
Заголовки REST ответа ставит REST сервер, также он делает соответствующий запрос в БД или что-угодно еще.
Похожие посты
- 16 августа, 2021
- 5-6 мин.
- 453
Похожие посты
- 6 сентября, 2021
- 4-5 мин.
- 438
Как изменить robots.txt в мультисайте WordPress
WordPress динамически создает robots.txt. Чтобы перезаписать его при обычной установке без использования нескольких сайтов, вы можете просто загрузить статический файл robots.txt на сервер. При установке системы мультисайтов это приведет к перезаписи файла robots.txt для всех сайтов, что не всегда является нужным результатом. В этой заметке мы обсудим, как можно изменить robots.txt для отдельных сайтов мультисайта….
Подключение и локализация скриптов
Для работы этой формы необходимо создать js-файл и подключить его в файле functions.php с помощью хука wp_enqueue_scripts . Например, ajax-form.js. У меня этот файл находится в папке /assets/js/, компилируется и минифицируется галпом.
Если вы используете плагин кеширования, например WP Super Cache, то вы должны настроить его так, чтобы кеш очищался не реже, чем раз в сутки, т.к. функция wp_create_nonce() создает одноразовый код nonce на 24 часа и если он будет просрочен, то проверка формы будет вызывать ошибку
Возможности functions.php
functions.php располагается в папке темы и загружается каждый раз, во время просмотра внешней части сайта, в админ-панели и даже во время AJAX запросов. Нет случая, когда functions.php не будет подключен и это открывает широкие возможности перед разработчиками.
Для примера, следующий код, вставленный в файл темы functions.php расширит возможности темы - включит поддержку миниатюр поста:
Другой пример, код заменит текст в подвале админ-панели WordPress, на данные о количестве запросов к базе данных, времени генерации страницы и использовании памяти:
require()
Согласно руководству по PHP: require() работает так же, как include() , но выдает фатальную ошибку PHP, если файл не найден.
Файл, подключенный с помощью require() будет выполнять то же действие, что и include() , в части импорта внешнего скрипта в контекст того, над чем вы работаете, но если ему не удается найти файл, он выдаст фатальную ошибка и полностью остановит выполнение.
На каком-то уровне может показаться, что требовать файлы — это правильный путь. В конце концов, зачем вам рисковать, включая что-то, чтобы получить предупреждение о потенциальном сбое в приложении.
Но все зависит от характера того, над чем вы работаете. Иногда можно использовать простые предупреждения PHP — например, забыть инициализировать индекс массива — в других случаях вам нужно точно знать, что файл подключен.
Не существует жестких правил, определяющих, когда использовать require() , а когда include() . Скорее всего тут нужно просто опираться на здравый смысл.
Как сделать предварительную регистрацию скриптов
Еще одной важной особенностью работы со скриптами является то, что скрипт можно только зарегистрировать c помощью функции wp_register_script() , а выполнять подключение уже в любом другом месте проекта по необходимым условиям. Рассмотрим на примере:
Сначала мы регистрируем скрипты библиотеки masonry для того, чтобы сделать красивые фото-галереи у нас на сайте. Эти скрипты не будут подключены в html-документ до тех пор, пока вы не используете функцию wp_enqueue_style() или wp_enqueue_script() .
Сами фото-галереи выводятся с помощью шорткодов и мы можем прямо здесь выполнить их подключение. Таким образом эти скрипты будут подключены в html-документе только в том случае, если на странице будет использован этот шорткод.
Каждый знакомый с WordPress слышал про файл темы (шаблона) functions.php . Однако не все хорошо понимают его назначение, видя в нем лишь файл в котором хранятся различные php функции. В сети, как и у меня на этом сайте, часто предлагается добавлять PHP код в этот файл. Однако не каждый код подойдет для этого файла. Не потому что он не будет работать, а потому что он не подходит по логике использования.
Также при редактировании functions.php новички допускают ошибки из-за которых сайт перестает работать.
В этой статье я постараюсь рассмотреть все эти моменты: когда нужно использовать functions.php и когда этого лучше не делать, какие ошибки при редактировании functions.php могут возникнуть.
Загрузка Фронт-энда (темы)
Любые Фронтэнд запросы отправляются в файл index.php в корневой папке домена. Это означает, что WordPress загружается с темой. Для констатации этого факта в index.php определяется константа WP_USE_THEMES . Так например хук template_redirect из файла template-loader.php будет работать только, если определена эта константа.
Процесс загрузки Фронта выглядит так:
Подробнее про установку основного запроса и среду WP, читайте в описании функции wp().
Смотрите также картинку о том, как работает запрос WordPress:
Как правильно подключать стили и cкрипты в дочерней теме WordPress?
На эту тему написано уже десятки статей, но тема продолжается обсуждаться, а в чатах и на форумах люди снова и снова задают вопросы и сталкиваются с проблемами. Давайте вместе попробуем на примерах разобраться как же правильно подключать стили и скрипты в WordPress. Начнем по порядку. Есть хук wp_enqueue_scripts, который срабатывает в момент подключения в очередь…
Как подгружается functions.php
functions.php подключается во время инициализации текущей темы, после того, как подключены все функции WordPress и все активные плагины. Опишу коротко хронологию загрузки WordPress, где видно, когда подключаются важные файлы:
Процесс загрузки WordPress, и functions.php в частности, хорошо показан на этом рисунке:
Схема загрузки WordPress
Создание обработчика формы
Обработчик скрипта может быть написан напрямую в файле functions.php, но правильнее будет создать отдельный файл и подключить его с помощью require_once , примерно так:
Обработка ajax «подвешивается» на динамические хуки wp_ajax_ и wp_ajax_nopriv_ . В нем мы проверяем nonce, дополнительные поля для защиты от спама и обрабатываем поля. Если в процессе у нас возникают ошибки, то мы возвращаем их в виде массива в js-скрипт. Если обработка полей проходит успешно, то мы собираем письмо, заголовки и отправляем с помощью функции wp_mail() .
В поле $email_to вы должны указать email, на который будут отправляться письма. Советую указывать в этом поле email отличный от администратора, т.к. в противном случае, при отправке писем могут возникнуть ошибки у некоторых почтовых клиентов.
Если все сделано верно, то у вас будет примерно такая форма. Она будет выводить ошибки и, что важнее, отправлять письма.
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 5 / 5. Количество оценок: 3
Оценок пока нет. Поставьте оценку первым.
include()
Согласно руководству по PHP: include() будет включать и оценивать указанный файл. Если файл не найден, будет выдано предупреждение PHP.
Проще говоря, это означает, что PHP будет искать файл, который вы пытаетесь включить. Если он найден, он будет добавлен в ваш скрипт в том месте, где вы его объявили.
Это важно понимать. Например, предположим, что вы пишете набор функций, которые зависят от предыдущего набора функций. В этом случае вам нужно убедиться, что сначала включен другой файл.
С другой стороны, если вы хотите добавить набор функций или внешний файл в середине существующей функции, вы можете включить его точно в то место, где он вам нужен.
Во-вторых, обратите внимание, что если файл отсутствует, PHP выдаст предупреждение. В зависимости от конфигурации сервера вы можете увидеть это в браузере или в файле записи журнала (или и то, и другое).
Тем не менее, предупреждения не считаются фатальными и обычно не останавливают выполнение функций, но их важно учитывать, потому что это может означать, что часть вашей работы не загружается и/или не интерпретируется должным образом.
Наконец, обратите внимание, что когда файл загружается с помощью include() , он будет иметь доступ ко всем переменным, ранее определенным в вашем существующем скрипте.
Предположим, что вы работаете над функцией и на полпути к выполнению функции вы собираетесь включить отдельный файл. Этот отдельный файл будет иметь доступ к переменным, определенным ранее в функции, в которую он включен.
Хотя вы можете рассматривать это как удобство, это делает внешний сценарий немного неясным, поскольку он не обязательно показывает, что зависит от переменных, определенных извне. Это может сбивать с толку, особенно при работе в команде.
Как сделать обновление скриптов в кеше браузера
Один из часто задаваемых вопросов звучит примерно так: «Почему я изменяю css файл, но эти изменения не видны на сайте?».
Ответ на него достаточно простой: при первом посещении сайта браузер скачивает файлы стилей, скриптов, изображения и т.д. себе в кеш. При каждом последующем посещении браузер уже не будет скачивать их заново, а возьмет из своего локального хранилища (кеша). Это работает в целях оптимизации посещения интернет-ресурсов.
Но есть отличный способ динамически сообщать браузеру об изменениях в ваших файлах — указывать их версии. Это удобно делать с помощью функции filemtime() .
Теперь браузер будет проверять, изменилась ли версия (время последнего изменения) файла и только в случае положительного ответа скачивать файл заново.
К тому же, в одной из последних версий добавили функцию get_theme_file_uri() , которая проверяет наличие файла в дочерней теме перед подключением, это довольно удобно.
Если мы применим эти советы, то получим примерно следующее:
Популярный генератор тем underscores в качестве версии скриптов указывает некую магическую константу _S_VERSION , предварительно определив ее define( '_S_VERSION', '1.0.0' ) . Как вы понимаете, версия не будет меняться динамически при таком подходе и ее указание довольно бессмысленно.
Когда-что использовать
При использовании этих функций я советую, в первую очередь, опираться на здравый смысл, а во вторую но чьи-то рекомендации, но если вы все же решите воспользоваться советами, то вот принципы, которые я использую чаще всего:
- При подключении файлов в functions.php чаще всего я использую require_once()
- При подключении фронтенд-шаблонов в файлах темы использую get_template_part()
- При разработке плагинов я почти всегда использую include_once() и обычно использую его один раз в функции
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 5 / 5. Количество оценок: 1
Оценок пока нет. Поставьте оценку первым.
functions.php против плагинов
— «Плагины работают медленнее чем код в файле functions.php», говорят неосведомленные - это не так!
Нет никакой разницы в скорости работы кода, не важно подключается он через плагин или через файл functions.php. Подробнее читайте в отдельной заметке.
Теоретически вставка кода в functions.php равносильна установке плагина, но это не одно и тоже. Ведь при смене темы, мы получим совершенно другой functions.php и все внесенные изменения будут потеряны, а вот плагин останется, сколько тему не меняй. С этих соображений и нужно относится к файлу functions.php. Если добавляемый функционал относится не только к теме, но и к сайту в целом, то стоит задуматься о подключении его в виде плагина.
Второй пример выше «Данные о количестве запросов к базе данных в подвале админки». По логике не подходит для использования в файле functions.php. Потому что, если мы сменим шаблон, то мы потеряем этот функционал, а он используется в админке и нужен независимо от того какая тема используется.
Поэтому, давайте удалим его из functions.php и сделаем из него плагин - это просто!
Чтобы создать плагин нужно создать файл с кодом ниже (название файла может быть любое), добавить его в каталог плагинов wp-content/plugins/ и активировать плагин в админ-панели:
Если нет желания видеть еще один плагин в админ-панели, то можно использовать Must-Use плагины.
Комментарии: 1
Спасибо очень полезное и интересное решение.
Скажите вот я создал свой отдельный файл обработчик и положил его в дочернию тему. А подключать мне его как?
в самом обработчике эту функцию писать?
И пути сохранения и название файла важны или любые можно давать?
require_once get_stylesheet_directory() . ‘/моя-тема/wp-mail.php’;
Читайте также: