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 плагины
WordPress: плагин или изменение кода? На многих ресурсах предлагаю внести изменения в код в файле function.php, тем более, что WordPress позволяет сделать это через встроенный редактор. Здесь добавили, тут поменяли - все отлично работает. Насколько это хорошо? Решив быстро текущую проблему, Вы можете получить проблемы в будущем. Да, файл function.php задуман так, что бы при обновлении темы Ваши дополнения не терялись. Но - Вы можете поменять тему - и все Ваши доработки пропадут. Ведь при смене темы, мы получим совершенно другой functions.php и все внесенные изменения будут потеряны, а вот плагин в системе останется, сколько тему не меняй. С этих соображений и нужно относится к...(Читать полностью...)
- Всего статей в разделе: 12
- Показано статей в списке: 12
- Сортировка: название по алфавиту
Плагин анализа seo ключевых фраз в посте (backend)
Плагин позволяет проверить включение списка seo ключевых фраз в тексте поста/страницы. WopdPress плагин tsl-plugin-seo-text добавляет в просмотренную запись список последних семь публикаций в этой же рубрике. Назначение: Backend (для администратора сайта) Проблема: Администратор не имел статистику включения ключевых фраз в тексте поста/страницы. Решение: Плагин tsl-plugin-seo-text добавляет информацию по ключевым фразам в тексте статистика использования анализ использования заголовков H2-H6 [sdm_download id="2762" fancy="1"] ВАЖНО: просьба обо всех найденных ошибках, предложениях, багах сообщать через форму обратной связи. Настройки: пока нет Обновления:...(Читать полностью...)
Плагин анализа изображений в записи/странице (backend)
Для оптимизации картинок на странице нам необходимо иметь полную информацию по каждому изображению. WopdPress плагин tsl-plugin-ampel-seo-picture собирает информацию по изображениям на странице и выводит её в отдельном метабоксе внизу страницы. Дополнительно в правой панели добавляется метабокс для ускоренной навигации. ВАЖНО: Плагин в разработке. Часть функций не доделана. Все пожелания будут рассмотрены. Проблема: Для увеличения скорости загрузки страницы необходимо оптимизировать изображения на странице. Встроенных средств WP явно не достаточно. Более того - в WordPress можно выбрать "неиспользуемые" (они же не прикрепленные) медиаизображения и удалить их. Этого...(Читать полностью...)
Плагин вывод тэгов фавикона в head сайта
Не во всех темах прописан в коде фавикон. Т.е. при наличии фавикона он нормально показывается браузером (если в корне сайта), но его иногда не видят поисковые роботы, т.к. он не указан в коде. WopdPress плагин tsl-plugin-head-favicon добавляет ссылку link rel на файл фавикона в head сайта блокировка запуска плагина лихими хакерами вне пространства WordPress через url браузера по прямому пути (выводится информационная заглушка) Проблема: Некоторые поисковые роботы и браузеры "не видят" favicon.ico на сайте без явного указания его в коде сайта. На многих темах в WordPress нет возможности указать в настройках размещение уже готового файла...(Читать полностью...)
Плагин вывода анонсов постов в конце контента (frontend)
Как увеличить глубину просмотра сайта? Рецепт простой - надо предложить пользователю анонс похожих постов (т.е. в той же рубрике и того же автора) после прочтения текущей статьи. Будем в конце контента показывать пользователю список последних записей по такой же рубрике. WopdPress плагин tsl-plugin-out-list-posts добавляет в просмотренную запись список последних семь публикаций в этой же рубрике. Назначение: Frontend (для посетителей сайта) Проблема: пользователь сразу не видит других постов автора, текущую статью которого он прочитал. Решение: Плагин tsl-plugin-out-list-posts добавляет список последних публикаций по данной рубрике (фильтр) по данному автору...(Читать полностью...)
Плагин вывода списка авторов блога (виджет)
Плагин создает виджет для вывода списка авторов блога. WopdPress плагин tsl-plugin-list-author создает виджет со списком авторов блога. Авторы - это пользователи, у которых есть записи. Пользователь без записей не выводится. Назначение: Frontend (для посетителей сайта) Проблема: плагинов вывода списка авторов много, это еще один :). Решение: Плагин tsl-plugin-list-author добавляет виджет для вывода в сайтбаре. [sdm_download id="2068" fancy="1"] Можно посмотреть на сайтах (открытие в новом окне): https://antontitov.ru/ https://imory.ru/ ВАЖНО: просьба обо всех найденных ошибках, предложениях, багах сообщать через форму обратной связи. Настройки: в настройках...(Читать полностью...)
Плагин добавления вывода кода кнопок share42.com
Есть популярный сервис кнопок "поделиться" share42.com WopdPress плагин tsl-plugin-share42 добавляет код вызова скрипта в футер сайта блокировка запуска плагина лихими хакерами вне пространства WordPress через url браузера по прямому пути (выводится информационная заглушка) Проблема: кнопки генерируется хорошие, но код запуска скрипта нужно добавлять вручную. И это добавление пропадет при обновлении темы. Неудобно. [sdm_download id="1230" fancy="1"] Решение: Плагин обеспечивает добавление кода вызова скрипта в футер сайта независимо от темы. ВАЖНО: просьба обо всех найденных ошибках, предложениях, багах сообщать через форму обратной...(Читать полностью...)
Плагин добавления колонки featured image (миниатюра) в административной панели
Плагин добавляет колонку "Миниатюра" в административную панель при выводе страниц и записей. Плагин tsl-plugin-admin-thumb Обеспечивает наглядное представление списка featured image Проблема: В стандартном списке страниц / записей нет никакой информации по прикрепленным миниатюрам (есть они, нет их, какой размер у них размер). Для чего нужны миниатюры - читаем статью Миниатюры (thumbnails) записей и страниц WordPress Решение: Плагин обеспечивает наглядное представление списка featured image (большие по размерам миниатюры показываются крупнее) позволяет разработчику сайта легко и визуально контролировать размеры миниатюр. Очевидно, если размер миниатюры более 30 Кб - то это...(Читать полностью...)
Плагин закрытия путей JSON (список пользователей)
WordPress REST API (или коротко WP API) позволяет пользователям (HTTP Клиентам) удаленно взаимодействовать с сайтом: отправлять запросы и получать ответы. Ответы приходят в JSON формате. Так, например, можно получить посты, рубрики, комменты сайта и т.д. Без входа в админпанель. Кроме того, такие данные можно создавать/изменять/удалять. Делается все это через URL запросы, так называемые «маршруты». Можно создавать свое приложение для редактирования постов/страниц без использования админпанели. отправляете определенный URL вида mysite.ru/wp-json/....... получаете ответ в виде JSON (длинная текстовая строка в определенном формате) редактируете и при наличии логина/пароля...(Читать полностью...)
Плагин корректировки вывода цен WooCommerce
Плагин TSL plugin WooCommerce price делает три полезные вещи: вывод "руб." рядом с ценой (исправляет ошибки вывода, которые "квадратик" на разных браузерах) вывод "по запросу", если цена на товар не указана на панели магазина добавляет статус товара "Есть/нет в наличии" [sdm_download id="1231" fancy="1"] ВАЖНО: просьба обо всех найденных ошибках, предложениях, багах сообщать через форму обратной связи. Настройки: пока нет Обновления: автоматического обновления пока нет - для ручного обновления необходимо зайти из административной панели на страницу плагина и скачать последнюю актуальную версию плагина. Установка...(Читать полностью...)
Плагин метабокса консоли – вывод файла robots.txt
Вывод листинга файла robots.txt в консоли Данный информационный метабокс выводит содержимое файла robots.txt в консоли для оперативного контроля. WopdPress плагин tsl-plugin-console-robots добавляет метабокс с информацией о содержимом robots.txt (и ответами сервера) в консоль административной панели сайта. Проблема: Не всегда удобно проверять содержимое robots.txt через адресную строку браузера. А регулярно проверять надо. Зачем? Вроде один раз настроили - и пусть работает. Да - но некоторые кривые плагины могут туда дописать свою информацию. Так почему-то решили разработчики. И дописывают, причем: криво ничего об этом не сообщая владельцу блога Роботы поисковых...(Читать полностью...)
Плагин метабокса консоли – список зарегистрированных размеров изображений блога
Да, это тот самый список, на основании которого WoprdPress при загрузке файла в медиатеку создает целых набор файлов разного размера из исходного файла. Данный информационный метабокс позволяет пресекать излишнюю фантазию разработчиков темы и плагинов (и в конечном счете экономит место на хостинге). WopdPress плагин tsl-plugin-console-list-size добавляет метабокс с информацией о зарегистрированных размерах изображений в консоль административной панели сайта. Проблема: В административной панели сайта на CMS WordPress нет информации о всех зарегистрированных размерах изображений (под которые будет производиться нарезка при загрузке медиафайлов). Решение: Плагин добавляет метабокс с...(Читать полностью...)
Плагин создания sitemap.xml в корне сайта
Плагин создания sitemap.xml в корне сайта WopdPress плагин tsl-plugin-sitemap-xml обеспечивает генерацию физического файла sitemap.xml (в корне сайта) для страниц и постов при их создании и удалении. Проблема: Необходимость указывать в файле sitemap.xml только url страниц и постов без страниц архивов и пагинаций и без настроек. Необходимо выключить показ атрибута <lastmod> (который показывает роботам дату последнего изменения страницы) для лучшего продвижения. Решение: Генерацию физического файла sitemap.xml (в корне сайта) для страниц и постов при их создании и удалении. [sdm_download id="1233" fancy="1"] ВАЖНО: просьба обо всех найденных ошибках,...(Читать полностью...)