Функции вместо плагинов в WordPress: примеры и советы

Функции вместо плагинов в WordPress: примеры и советы

Не всегда нужен плагин, чтобы добавить полезную функцию в WordPress. В статье показали три работающих примера кода, которые помогут ускорить сайт на VPS, сократить количество модулей и взять управление в свои руки.

Введение

Любой, кто работал с WordPress, знает, что практически для каждой мелочи существует свой плагин. Хочется добавить форму, чуть изменить дизайн или поведение сайта — достаточно найти подходящий плагин и установить. Но каждый лишний плагин вносит дополнительный код, который может замедлить сайт и даже создать конфликты. Так ли уж необходимо ставить отдельный модуль для любой мелкой задачи?

В статье рассказали, как использовать свой код вместо плагинов на WordPress. Привели практические примеры функций, которые позволят реализовать полезные возможности без установки дополнительных плагинов.

Аренда VPS/VDS — от ₽219/месяц

Почему выбирают VPS от AdminVPS:

✓ Дешевле физического сервера

✓ Более гибкий и мощный, чем обычный хостинг

✓ Бесплатная защита от DDoS и техподдержка 24/7

✓ Масштабируется под любые задачи

Виртуальный сервер VPS/VDS — ваш личный сервер для сайтов, магазинов, ботов и других проектов.

Когда лучше написать свою функцию

Зачем вообще отказываться от готовых плагинов и копаться в коде? Дело в том, что маленькие самостоятельные скрипты часто оказываются эффективнее. Они выполняют ровно ту одну задачу, которая вам нужна, и больше ничего лишнего. А плагин — это универсальный инструмент, рассчитанный на самые разные случаи, с кучей функций, настроек и файлов. Такой универсал может нагружать сайт сильнее, чем пара строчек в файле функций. К тому же, снижая количество плагинов, вы уменьшаете риск конфликта между ними и экономите ресурсы хостинга.

Используя собственный код, вы лучше узнаете WordPress и постепенно начнёте понимать, как всё работает изнутри. Для новичка это ценный опыт, когда можно почувствовать себя разработчиком и получить контроль над сайтом. Вместо того чтобы слепо доверять очередному модулю, вы сами видите, что делает ваша функция.

Однако важно соблюдать баланс. Не каждую задачу стоит решать самописным кодом. Например, реализовать многоязычность сайта или сложный интернет-магазин своими руками практически нереально, тут проще и безопаснее установить специализированный плагин, созданный командой опытных разработчиков. Но если речь о паре небольших улучшений, зачем тянуть в проект целый плагин? Часто веб-мастера грешат обратным: устанавливают тяжеловесные модули ради пустяков. В итоге десяток плагинов нагромождает сайт, хотя половину возможностей они никогда не используют. Такого лучше избегать.

Плагин обычно обновляется автором, а за свой код отвечаете только вы. Если решите сменить тему оформления, код в файле темы может пропасть. Поэтому любые правки вносят в дочерней теме или же оформляют как отдельный маленький плагин. Будьте осторожны при добавлении кода, ведь даже маленькая опечатка способна привести к белому экрану вместо сайта. Всегда сохраняйте резервную копию файла перед правками.

Добавление PHP-кода в виджет

Допустим, вы хотите вставить в сайдбар WordPress какой-то PHP-код. Например, скрипт партнёрской рекламы, виджет с динамическими данными или просто вызвать функцию прямо из текста. По умолчанию стандартный текстовый виджет не выполняет PHP, он отображает его как обычный текст. Существуют плагины, которые разрешают выполнение PHP-кода внутри виджетов, но можно добиться того же своими силами.

Для этого добавьте фильтр в файл functions.php, который перехватывает содержимое виджета и запускает PHP-код, если находит в нём конструкцию <? ... ?>. На практике код выглядит так:

function enable_php_in_widgets($widget_content) {
    if (strpos($widget_content, '<?') !== false) {
        ob_start();
        eval('?>' . $widget_content);
        $widget_content = ob_get_clean();
    }
    return $widget_content;
}
add_filter('widget_text_content', 'enable_php_in_widgets', 99);

Перед выводом виджета проверьте, есть ли в нём сочетание символов <?. Если да, то с помощью функции eval выполните этот PHP-код, используя буферизацию вывода (ob_start() / ob_get_clean()), и верните результат в виде обычного текста.

Обратите внимание!

eval запускает любой переданный ему код. Если злоумышленник получит доступ к редактированию виджетов, он сможет выполнить произвольные команды на сервере. Используйте этот метод только на полностью защищённых сайтах и только для администраторов.

После добавления этого сниппета сохраните файл. Теперь откройте админку WordPress и добавьте на сайт обычный текстовый виджет. Внутри него можно писать PHP-код в тегах <? ?>, он будет выполнен. Например, если вписать в виджет код:

<?php echo date('Y'); ?>

На сайте отобразится текущий год, а не сам текст PHP. Вы сами включили поддержку PHP в виджетах, контролируете, какой код там выполняется, и при необходимости можете эту возможность убрать, просто удалив или закомментировав несколько строк.

Конечно, давать PHP-доступ в виджетах стоит осторожно и только администраторам сайта. Убедитесь, что злоумышленник не получит доступ к виджетам, ведь тогда он сможет выполнить произвольный код.

Как почистить заголовок сайта и убрать лишние мета-теги

Если посмотреть HTML-код страницы WordPress, то в секции <head> можно обнаружить несколько автоматических вставок. Там выводятся мета-теги типа generator с версией WordPress, ссылки на файл манифеста Windows Live Writer, на сервис Really Simple Discovery (RSD) и даже скрипты для Emoji. Многие из этих элементов не несут пользы. Версия движка может подсказать злоумышленнику, каким уязвимостям подвержен сайт, а скрипты Emoji загружаются даже если вы не используете смайлики, замедляя загрузку. Существуют плагины для оптимизации header, которые убирают всё лишнее, но если цель лишь почистить заголовок, совершенно ни к чему ставить монструозный комбайн.

WordPress добавляет эти элементы через так называемые action hooks — специальные крючки, к которым привязаны функции. Вы можете отвязать ненужные функции с помощью remove_action. Например, чтобы убрать мета-тег с версией WordPress, достаточно одной строки:

remove_action('wp_head', 'wp_generator');

Эту строчку впишите в functions.php. Она отключает действие функции wp_generator() при событии формирования <head> (хука wp_head). После этого в коде страниц не будет метки:

<meta name="generator" content="WordPress 6.x.x">

Вслед за этим можно избавиться и от прочего мусора. Например, убрать скрипты Emoji:

remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

Здесь вы отключаете два связанных действия, которые отвечают за вставку скрипта и стилей Emoji. Первое, с приоритетом 7, удаляет <script> со скриптом обнаружения Emoji в <head>, второе — стили Emoji из блока <body>. Аналогичным образом можно убрать ссылку на RSD сервис:

remove_action('wp_head', 'rsd_link');

и на Windows Live Writer:

remove_action('wp_head', 'wlwmanifest_link');

Добавьте необходимые из этих строк в свой файл функций, сохраните изменения, и в HTML-коде ваших страниц сразу станет чище. Сайт ничуть не пострадает. Отключение wp_generator убирает только метку версии, но не затрагивает админку или работу самого WordPress. Удаление RSD и WLW ссылок никак не повлияет на посетителей, эти сервисы используются крайне редко. А отсутствие Emoji-скрипта просто значит, что браузер посетителя не будет тратить время на ненужный JS. Если на странице есть смайлики, они отобразятся обычными символами, но это не критично.

Настройка длины анонса записи своими руками

WordPress по умолчанию формирует короткий анонс записи длиной 55 слов. Часто эта величина либо слишком мала, либо, наоборот, велика для дизайна сайта. В результате заголовки и несколько строк текста смотрятся не так, как хотелось бы. В каталогах плагинов можно найти решения, позволяющие задать свою длину отрывка, но опять же, такой плагин будет делать ровно одну вещь. Зачем ради нескольких цифр подключать отдельный модуль, если можно решить вопрос кодом?

Настройка длины excerpt происходит через фильтр excerpt_length. Напишите функцию, возвращающую нужное вам значение, и повесьте её на этот фильтр. Код совсем небольшой:

function custom_excerpt_length($length) {
    return 20;  // желаемая длина в словах
}
add_filter('excerpt_length', 'custom_excerpt_length');

Здесь вместо 20 подставьте нужное число слов в анонсе. Например, 20 слов — это довольно короткий тизер из двух-трёх предложений. Можно указать 100 для более содержательного отрывка. После добавления этого сниппета сохраните файл и обновите страницу со списком постов или блогом на вашем сайте. Все автоматически генерируемые анонсы теперь обрезаются по новому лимиту.

Фильтр задаёт длину только для автоматического отрывка, который WordPress берёт из контента. Если же у записи заполнено поле «Цитата» вручную, то отображаться будет именно этот текст без изменений. Тем не менее во многих темах анонсы формируются автоматически, и этот код легко подстраивает их под ваши пожелания.

Кстати, с анонсами связана ещё одна популярная задача: изменить текст ссылки «Читать далее…». Обычно эта ссылка добавляется автоматически после обрезанного отрывка. Её тоже несложно заменить кодом через фильтр excerpt_more. Достаточно вернуть из функции нужную строку, например:

return ' <a href="'. get_permalink($post) .'">Читать полностью</a>';

Таким образом вы сможете задать свою фразу или даже оформить ссылку кнопкой. Всё это делается несколькими строками в functions.php и легко гуглится, плагин не нужен.

Мини-плагин вместо десятка мелких

Мы рассмотрели лишь три частных примера, но их на самом деле куда больше. В Интернете можно найти сотни сниппетов для WordPress, которые заменяют избыточные плагины. Например, вывод похожих записей после поста — это просто дополнительный WP-запрос (WP_Query) внутри шаблона, ничего сверхъестественного. Многие добавляют блок «Похожие статьи» плагином, хотя можно вставить несколько строк PHP в файл single.php и получить тот же результат, причём полностью под своим контролем. Вы можете сами решить, отбирать посты по категории или по тегам, сколько их показывать и как оформить. Ещё часто ставят плагины для хлебных крошек, но WordPress позволяет и самостоятельно пробежаться по иерархии страниц или категорий и вывести такие ссылки-навигацию вверху страницы. Достаточно прописать функцию и вызывать её в шаблоне.

Естественно, невозможно охватить все случаи одним советом. Важнее понять общий принцип: прежде чем ставить новый плагин, подумайте, а нельзя ли решить задачу более простым способом? Если речь идёт об одиночной функции, небольшом виджете или тонкой настройке, скорее всего, да, можно обойтись кодом. Со временем у вас может собраться целая коллекция полезных сниппетов. Чтобы ими было удобно управлять, группируйте родственные функции в одном месте и снабжайте их комментариями. Например, заведите файл «extra-functions.php» в папке темы и подключайте его из functions.php, чтобы основной файл не разрастался. Либо объедините несколько функций в собственный мини-плагин, как мы упоминали ранее. Так вы в любой момент сможете отключить или перенести эти улучшения на другой сайт.

Используйте только те кодовые решения, в которых уверены. Авторитетные источники и официальная документация — ваши друзья. Большинство простых сниппетов практически не меняются от версии к версии WordPress и не несут рисков. Однако если код совсем уж хитрый и нигде не обсуждался, лучше трижды проверить или спросить знающих людей. В крайнем случае, для особенно важных вещей можно предпочесть проверенный плагин, например, в вопросах безопасности или резервного копирования уж точно не стоит изобретать велосипед.

Заключение

Как видите, заменить плагин парой строк кода зачастую реально. Более того, это увлекательно. Вы избавляетесь от ненужных зависимостей, чуть ускоряете сайт и в то же время получаете новый опыт работы с WordPress. Конечно, нет цели полностью отказаться от всех плагинов. Хороший плагин экономит время и даёт продуманное решение, особенно когда задача сложная. Но теперь прежде чем нажать «Установить плагин» задайте себе вопрос, а можно ли решить проблему самостоятельно при помощи пары функций? Зачастую ответ будет «да», и вы с гордостью реализуете задумку своими руками. Ваш сайт скажет вам спасибо за лёгкость и быстродействие, а вы почувствуете себя чуть более продвинутым пользователем WordPress. Не бойтесь экспериментировать с кодом, начинайте с небольших проверенных сниппетов, и постепенно станете уверенно дорабатывать сайт без лишних плагинов.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Нужен VPS сервер?

Арендуйте мощный VPS сервер для ваших проектов! Быстрая настройка, высокая производительность и надежная поддержка 24/7. Начните прямо сейчас!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях