WordPress: плагин или изменение кода?
На многих ресурсах предлагаю внести изменения в код в файле function.php, тем более, что WordPress позволяет сделать это через встроенный редактор.
Здесь добавили, тут поменяли – все отлично работает.
Насколько это хорошо?
Решив быстро текущую проблему, Вы можете получить проблемы в будущем. Да, файл function.php задуман так, что бы при обновлении темы Ваши дополнения не терялись.
Но – Вы можете поменять тему – и все Ваши доработки пропадут. Ведь при смене темы, мы получим совершенно другой functions.php и все внесенные изменения будут потеряны, а вот плагин в системе останется, сколько тему не меняй. С этих соображений и нужно относится к файлу functions.php. Если добавляемый функционал относится не только к теме, но и к сайту в целом, то стоит задуматься о подключении его в виде плагина.
Установка изменений через плагины намного безопаснее. В WordPress есть встроенная система безопасности, которая контролирует корректную работу плагинов. Даже при смене версии PHP не происходит катастрофы, плагин переводится в неактивное состояние. И административная панель работает и сайт работает.
И что делать?
Есть 3-5 строчек кода, которые нужно разместить на сайте. И нет такого плагина в природе. Какой есть выход?
![]() | Плагины от разработчика GoodWin. Список плагинов внизу страницы.Пишу плагины потому что интересно. Раз – и WordPress начинает слушаться и делать то, что ему написали. Приходится всё делать самому :) Не судите строго, про найденные ошибки сообщайте через форму обратной связи. |
Ответ очевиден – будем делать свой суперплагин, который будет работать по всем правилам WordPress и позволит вносить нам нужные изменения в код сайта.
Начнем.
Плагин может быть личный (создается только для своего сайта), а может быть публичный (для общего пользования). Публичный плагин выкладывается в репозиторий плагинов WordPress.
Требования к личному плагину, обычно минимальны – главное, что бы работал.
Для публичного плагина нужна лицензия, поддержка, совместимость, локализация и прочее. Лицензия сообщает пользователям, как они могут использовать код плагина в своих целях. Для поддержания совместимости с ядром WordPress рекомендуется выбрать лицензию, работающую с GNU General Public License (GPLv2+).
Создаем простой текстовый файл (в Nonepad++ , обычный блокнот Windows не надо использовать) и сохраняем его с расширением php. Сохраняем файл в UTF-8 (иначе будет крякозябры вместо русских букв).
Например my-plugin.php
Внутри
<?php /** *Plugin Name: Мой плагин */ //тут будет собственно полезный код ?>
В редакторе:
Создаем папку с таким же названием my-plugin и через FTP закидываем на сервер в папку plugins.
Должно получиться так
wp-content/plugins/my-plugin/my-plugin.php
Если открыть административную панель WordPress – мы увидим наш “шедевр”.
Его можно даже активировать – но так кода внутри у нас пока нет, ничего не произойдет. Добавляем сюда наш написанный и отлаженный код (который ранее находился в function.php), сохраняем плагин, еще раз выкладываем его на сайт, активируем = можно пользоваться.
При активации возможна проблема:
“Плагин создал 3 символа неожиданного вывода при активации. Если возникнет ошибка “headers already sent” с RSS-лентами или иные проблемы, то попробуйте деактивировать или удалить этот плагин.”
PHP-файлы должны быть записаны на сервер в определённой кодировке, в частности в UTF-8 без BOM. Именно символы BOM являются “символами неожиданного вывода”.
Решение крайне простое:
1. Открываем свой файл в редакторе “Notepad++”
2. Выбираем пункт меню “Кодировки” -> “Преобразовать в UTF-8 (без BOM)”.
3. Сохраняем файл и заново размещаем на сервере.
Если ничего не помогает…. Где-то еще проблема в структуре файла, который создается русифицированной версией программы “Notepad++”.
Берем файл любого работающего плагина, удаляем весь код, оставляем “обвязку” файла, вставляем свой код, пишем свой заголовок и сохраняем под своим названием.
Защита от запусков скриптов PHP все среды WordPress
ВАЖНО: необходимо предусмотреть невозможность запуска php скрипта вне WordPress. Это же обычный файл php и будут желающие его запустить на сервере через url браузера. Нужно добавить немного магии (переменная ABSPASH создается внутри WordPress и содержит путь к корню сервера с “/” на конце).
if ( ! defined( 'ABSPATH' ) ) { echo 'Мой плагин - инфо о плагине <br />'; exit; }
При отсутствии переменной ABSPASH сработает только это условие в начале плагина.
Запускаем файл плагина php (вывод robots.txt в консоль) по прямой ссылке.
Бинго.
Без WordPress получили заранее написанную информационную заставку.
ВАЖНО: необходимо предусмотреть невозможность просмотра папки с плагинов. Да, у большинства хостеров папки закрыты настройками – но мы можем подстраховаться. В папку с плагином помещаем файл index.html, в котором напишем краткую информацию о плагине.
<html> <!– Информация о плагине –> Мой плагин - инфо о плагине <br /> </html>
Пытаемся сделать запрос к папке (откроется в новом окне)
Вежливый сервер запустил файл index.html от нашего плагина
Но роботов-подборщиков много (и названий плагинов тоже много) – жалко тратить ресурсы сервера PHP, что бы каждому показывать нашу заставку. Используем Apache – в папке /wp-content/plugins/ помещаем файл .htaccess с единственной записью
deny from all
Имеем прекрасный результат
Но сам WordPress конечно продолжит нормальную работу – мы закрыли доступ к папке планинов для любопытных снаружи, а WP находится внутри (такая матрешка…).
ВАЖНО: особое внимание для скрипта php, который обрабатывает обычную html форму. Его название и путь видно сразу из кода сайта (и название переменных тоже видно). Желающих его запустить напрямую (с какими-либо параметрами в url адресе) будет много. Если Ваш скрипт работает сам по себе (без WordPress) – предусмотрите существование глобальной переменной и проверяйте её в скрипте-обработчике.
<form action= "script.php" method= "POST"> <p>Имя: <input type= "text" name= "name"> </p> <p>E-mail: <input type= "text" name= "email"></p> <p>Ваше сообщение: </p> <p> <textarea name= "message"></textarea></p> <input name="valid_form" type="hidden" value="key"> <p><input type= "submit" value= "Отправить"></p> </form>
Или как вариант – “скрытое текстовое поле”. Например переменную valid_form с заранее заданным значением key и типом hidden (в форме данная переменная не отображается). И проверяйте эту переменную в скрипте. Если она есть – значит скрипт запущен как обработчик формы.
Так как переменные из формы передаются методом “POST”, использовать название этой переменной в методе “GET” через строку в URL не получится. В Вашем же скрипте PHP нет такой обработки:
$valid_form = $_GET['valid_form'];
Вернемся к нашему суперплагину.
Пример формата заголовка для публичного плагина.
<?php /** * Plugin Name: Название плагина * Description: Описание плагина * Plugin URI: Страница (url) плагина * Author URI: Страница (url) автора * Author: Имя автора * Version: Версия плагина, например 1.0 * * Text Domain: Идентификатор перевода, указывается в load_plugin_textdomain() * Domain Path: Путь до файла перевода. * * License: GPL2 * License URI: https://www.gnu.org/licenses/gpl-2.0.html * * Network: Укажите "true" для для мультисайтовой сборки. */ if ( ! defined( 'ABSPATH' ) ) { // проверка на запуск вне WordPress echo 'Мой плагин - инфо о плагине <br />'; exit; } //тут будет собственно полезный код ?>
ВАЖНО: если Вы делаете плагин из своего кода, который ранее работал в fuction.php – не забудьте его убрать оттуда. В противном случае Ваш суперплагин активировать не получится – WordPress сообщит о дублировании функции.
ВАЖНО: если у Вас есть дополнительные файлы PHP в папке плагина – там функции WordPress автоматом работать не будут, необходимо их подключить вручную.
Использование плагина Query Monitor
Крайне полезная вещь при разработке собственных плагинов. Показываем много полезной информации о работе системы, в том числе – ошибки выполнения кода PHP
Сам язык PHP допускает много вольностей, при которых всё будет работать:
- не объявленная переменная
- отсутствующие элементы массива
- и прочие шалости
Код будет выполняться, сервер PHP будет за Вас “додумывать”, что именно хотел разработчик. Но это не хорошо сейчас и может стать причиной критичных ошибок в будущем.
Ошибки PHP в любом случае пишутся в логи на сервере. Но данный плагин позволяет их оперативно увидеть из административной панели WordPress.
Подпишитесь в VKontakte - нажмите кнопку | ||
Подпишитесь в Telegram - нажмите кнопку | ||
Наша группа ODNOKLASSNIKI |
Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла
Пишите на электронную почту (тема и email будут добавлены автоматически в письмо)
В Вашем браузере должна быть настроена обработка ссылок mailto
site_post@bk.ru
или просто скопируйте адрес e-mail
Почитать в разделе
TSL плагины

(Читать полностью...)
- Всего статей в разделе: 12
- Показано статей в списке: 12
- Сортировка: название по алфавиту
Плагин анализа seo ключевых фраз в посте (backend)

(Читать полностью...)
Плагин анализа изображений в записи/странице (backend)

(Читать полностью...)
Плагин вывод тэгов фавикона в head сайта

(Читать полностью...)
Плагин вывода анонсов постов в конце контента (frontend)

(Читать полностью...)
Плагин вывода списка авторов блога (виджет)

(Читать полностью...)
Плагин добавления вывода кода кнопок share42.com

(Читать полностью...)
Плагин добавления колонки featured image (миниатюра) в административной панели

(Читать полностью...)
Плагин закрытия путей JSON (список пользователей)

(Читать полностью...)
Плагин корректировки вывода цен WooCommerce

(Читать полностью...)
Плагин метабокса консоли – вывод файла robots.txt

(Читать полностью...)
Плагин метабокса консоли – список зарегистрированных размеров изображений блога

(Читать полностью...)
Плагин создания sitemap.xml в корне сайта

(Читать полностью...)