Что использовать: плагин или сниппет? Инфографика

Многие сталкиваются с вопросом: использовать ли в WordPress плагин, или лучше найти решение без плагина, и прописать код в файле functions.php (который еще называется сниппет)? В разных ситуациях ответы на этот вопрос будут разными.

Основное правило – если ваша функция нужна для оформления контента, используйте сниппет. Если функция нужна для создания нового контента, и вы не хотите потерять функциональность после смены темы, то используйте плагин.

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

  • Скрипты статистики посещаемости
  • SEO-настроки
  • Кнопки типа “поделиться в соц. сетях”
  • Шорткоды для вывода контента
  • Пользовательские типы записей и пользовательские таксономии
  • Удаление или модификация функций ядра WordPress
  • Отключение админ-бара
  • Сжатие и кеширование

Причем этот список, как сказано в документации, далеко не полный. Поэтому, особенно новичкам, иногда бывает трудно определить, когда лучше использовать код в файле функций, а когда – плагин.

Хотелось бы сразу сказать, что распространенное мнение о том, что плагины тормозят работу сайта – это миф. Нагрузку на сайт создает криво написанный, неоптимизированный код, и не важно, где он расположен – в плагине или в теме.

Что лучше: код в functions.php или плагин?

Чтобы облегчить выбор, я создала инфографику, которая поможет определить, что лучше использовать для создания определенной функциональности в WordPress в конкретном случае: плагин или сниппет для functions.php

Плагин или сниппет? Что лучше использовать?
Что лучше использовать в WordPress: сниппет или плагин? Инфографика поможет определить, что лучше использовать для создания определенной функциональности в WordPress: плагин или код в файле functions.php

Разберем на примере. Я хочу сделать шорткод, который будет оформлять текст в рамочку, и делать заливку фона зеленым цветом. Вот так:

это образец действия шорткода
Моя тема сделана на Bootstrap, поэтому для того, чтобы сделать такое оформление, мне нужно дописать классы alert alert-success к div, в котором расположен текст. Идем по схеме:

  • функция связана с работой с контентом
  • ее основное применение – оформление контента
  • и функциональность связана с текущей темой оформления, так как без Bootstrap’а работать не будет
  • есть смысл использовать это не только в текущей теме
  • но на других сайтах я так делать не буду, потому что нужно будет создать дополнительные CSS-стили, которые по-умолчанию идут с бутстрапом

Поэтому я разместила свой код в файле функций.

Другой пример. Сейчас я публикую серию постов о создании темы. Для удобства читателей, я решила создать специальную таксономию, кроме рубрик и меток, и назвать ее Серии. Я это сделала при помощи вот этого генератора: http://generatewp.com/taxonomy/. Куда я должна положить этот код? Согласно схеме:

  • функция нужна для работы с контентом
  • она им управляет и создает новый контент, то есть создает Серии и позволяет назначить пост к серии
  • и после смены темы я бы не хотела потерять серии постов

Поэтому этот код я оформила как плагин. Но как сделать плагин из кода для файла functions? Читайте об этом далее.

Как превратить сниппет в плагин?

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

Чтобы сделать такой плагин, потребуется:

  • создать в папке /plugins/ новую подпапку, и назвать ее английскими буквами без пробелов и заглавных букв
  • в этой папке создать новый пустой файл, и тоже назвать его английскими буквами без пробелов и заглавных

Теперь в файл, который вы только что создали, нужно вставить такой код:

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

Далее, нам нужно вставить код функции (сниппета) в этот файл, ниже комментария в 12 строке. 12 строку, кстати, можно удалить. Покажу на примере.

Вот эта функция добавляет к посту css-класс has_thumb, если у поста есть миниатюра:

Она очень маленькая, поэтому на ее примере удобно научиться делать плагины. Давайте это сделаем:

Такой способ преобразования сниппетов в плагины будет работать в 99% случаев. Это очень удобно, так как управлять плагинами намного проще, чем вставками в файл functions.php. И, вопреки распространенному мнению, нагрузки на сайт от такого плагина не будет больше, чем от того же самого кода, вставленного в functions.

Если у вас есть какие-то вопросы, или вы не согласны с моим мнением, пишите в комментарии!




12 комментариев к “Что использовать: плагин или сниппет? Инфографика”

  1. Константин

    Здравствуйте Ирина! Насколько я понял, такие функции есть в некоторых шаблонах типа Вставить свой CSS или вставить код в “тело”, но ваша функция только для functions php, Правильно?

    Ответить
    • Ирина

      Доброе утро, Константин! Обычно у всех постов к тегу article добавляются такие классы:

      Функция, которую я взяла в качестве примера, добавит к постам, у которых есть миниатюра, класс has_thumb.

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

      Да, ее можно вставить в functions, а можно оформить как плагин. Последний вариант будет намного удобнее в использовании.

      Ответить
  2. Константин

    Например: я стащил с какого либо блога код “Счетчик количества просмотров статей”. Он делится на 3 части Первая функция отвечает за получение количества просмотров, а вторая за вывод этой информации. Сами функции необходимо вставить в файл с функциями шаблона. По умолчанию – это файл functions.php. Далее код ….. Причем эти функции можно вставить как одно целое – уже испытано.
    Ну и завершающее две строчки кода в файл single.php – вывод самого счетчика.
    И я пока не могу понять как это можно сделать плагином. Причем на вставку такого кода напрямую, у меня ушло от силы пять минут. Но это опять таки до первого обновления шаблона. Просто хочу попробовать разобраться, мне ваш пост очень понравился, но мозгов пока не хватает.

    Ответить
    • Ирина

      То, что Вы выставляли в functions, можно по моей инструкции сделать плагином. А то, что выставляли в single, также надо вставлять в single 🙂

      Ответить
  3. Кристина

    А я вот стараюсь по минимуму плагинами пользоваться… но не всегда выходит, т.к. кодить я не очень умею.
    Мне очень понравилась особенно часть поста о том, как сделать из кода плагин! За это отдельное спасибо)))
    Кстати, шорткоды для оформления статьи – это очень полезная штука, у меня они появились после установки новой темы, до этого и не знала о них.

    Ответить
    • Ирина

      Я тоже стараюсь по минимуму, но исхожу из того, насколько мне та или другая возможность действительно необходима, а не “можно ли сделать то же самое без плагина”.

      И в итоге у меня сейчас стоит 24 плагина, без которых я не представляю, что бы делала, и еще 4 деактивированы, но включаю их несколько раз в месяц для выполнения спецефических задач (они создают собственные элементы в меню, и в итоге меню не помещается полностью на экран нетбука, что меня раздражает 🙂 )

      А про шорткоды, кстати, у меня отдельный пост есть: https://oriolo.ru/poleznyie-shotrkodyi-wordpress/

      Ответить
  4. webslicer

    Ирина, то, что из кода можно сделать плагин – для меня стало откровением… Эврика! Вот оно! А ведь приходилось записывать в блокнот о внесенных изменениях, чтобы не забыть перенести их при смене темы…

    Ответить
  5. Сергей

    Для меня всё намного проще – плагины и только плагины и сейчас объясню почему: вот я сделал сайт, вот всё работает, вот я сдал его заказчику с кучей инструкций и полезных советов. Все счастливы ))) А потом обновляется WordPress и всё летит к… в общем непорядок. Нужно лезть в код, искать в чем проблема, гуглить и т.д. С плагином проще – если он поддерживается, то обычно он сразу и обновляется. Так что по возможности стараюсь обойтись без кода. А в свою сборку включил всего 9 плагинов, антиспам, защита, обратная связь, кеш, шорткоды и ещё кое-что ( для визиток и небольших сайтов особо много не нужно, это не блог, где одних только плагинов комментариев штук пять-шесть ставится )

    Ответить
  6. Сергей

    Всё, что вы запишете в файл functions.php в дальнейшем будет потеряно при обновлении WordPress (особенно если обновление настроено на автоматический режим) поэтому лучше на мой взлгяд не полагаться на этот метод а использовать собственные плагины, как тут пишет хозяйка блога

    Ответить
  7. Михаил

    Здравствуйте, Ирина. Спасибо за статью. Вопрос мой несколько не по ней а может и по ней. уже сломал всю голову как загуглить то что мне нужно.
    В общем: у меня есть сайт, его главная страница представляет собой длинную портянку (лединг) + у него куча отдельных страниц в которых от первой(главной – лединга) остается только шапка и подвал. Что я сделал. 1. новую тему для этого сайта. 2. коды подвала и шапки вынес в соответствующие файлы. 3. в файле page.php темы по условию is_frontpage() выводится статичная часть лединга. Что мне нужно сделать? самое главное эти статичные куски лединга сделать редактируемыми из админки. причем сделать это так чтобы администратор сайта в будущем при редактировании данных блоков текста не мог нарушить верстку темы.

    Ответить
    • Алексей

      Я решал такую задачу двумя способами:
      1. Регистрация и вывод виджета (удобно для ШТМЛ). инфы много как реализовать.
      2 . Создание отдельный рубрики для блока. Функцией вызываем блок. реализацию делал (штмл + бутстрап)
      2.1 создаем рубрику для блока в нее потом публикуем нужный пост.
      2.2. создаем див в нужном месте. в диве делаем функцию вызывающую рубрику с указанием количества постов (можно и 1 пост). циклами и стилями можно задавать стили и вывод инфы + css

      Ответить
  8. Вячеслав

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

    Ответить

Оставить комментарий