Багато стикаються з питанням: чи використовувати в WordPress плагін, або краще знайти рішення без плагіна, і прописати код у файлі functions.php (який ще називається сниппет)? У різних ситуаціях відповіді на це питання будуть різними.
Основне правило - якщо ваша функція потрібна для оформлення контенту. використовуйте сниппет. Якщо функція потрібна для створення нового контенту. і ви не хочете втратити функціональність після зміни теми, то використовуйте плагін.
На офіційному сайті WordPress в розділі для розробників наводиться наступний список тих можливостей, які слід виносити в плагіни:
- Скрипти статистики відвідуваності
- SEO-настроки
- Кнопки типу "поділитися в соц. мережах "
- Шорткоди для виведення контенту
- Призначені для користувача типи записів і призначені для користувача таксономії
- Видалення або модифікація функцій ядра WordPress
- Відключення адмін-бару
- Стиснення і кешування
Причому цей список, як сказано в документації, далеко не повний. Тому, особливо новачкам, іноді буває важко визначити, коли краще використовувати код в файлі функцій, а коли - плагін.
Хотілося б відразу сказати, що поширена думка про те, що плагіни гальмують роботу сайту - це міф. Навантаження на сайт створює криво написаний, неоптимізований код, і не важливо, де він розташований - в плагіні або в темі.
Що краще: код в functions.php або плагін?
Щоб полегшити вибір, я створила інфографіку, яка допоможе визначити, що краще використовувати для створення певної функціональності в WordPress в конкретному випадку: плагін або сниппет для functions.php
Що краще використовувати в WordPress: сниппет або плагін? Інфографіка допоможе визначити, що краще використовувати для створення певної функціональності в WordPress: плагін або код в файлі functions.phpРозберемо на прикладі. Я хочу зробити шорткод, який буде оформляти текст в рамочку, і робити заливку фону зеленим кольором. Ось так:
це зразок дії шорткода
Моя тема зроблена на Bootstrap, тому для того, щоб зробити таке оформлення, мені потрібно дописати класи alert alert-success до div. в якому розташований текст. Йдемо по схемі:
- функція пов'язана з роботою з контентом
- її основне застосування - оформлення контенту
- і функціональність пов'язана з поточною темою оформлення, так як без Bootstrap'а працювати не буде
- є сенс використовувати це не тільки в поточній темі
- але на інших сайтах я так робити не буду, тому що потрібно буде створити додаткові CSS-стилі, які по-замовчуванню йдуть з бутстрапа
Тому я розмістила свій код у файлі функцій.
- функція потрібна для роботи з контентом
- вона ним керує і створює новий контент, тобто створює Серії і дозволяє призначити пост до серії
- і після зміни теми я б не хотіла втратити серії постів
Як перетворити сниппет в плагін?
Припустимо, ви знайшли цікавий код, який хотіли розмістити у файлі functions.php, але після прочитання цього посту передумали, і вирішили скористатися плагіном. Вам зовсім не обов'язково шукати плагін з таким же функціоналом, як і сниппет. Адже його можна легко превраріть в плагін!
Щоб зробити такий плагін, потрібно:
- створити в папці / plugins / нову підпапку, і назвати її англійськими літерами без пробілів і заголовних букв
- в цій папці створити новий порожній файл, і теж назвати його англійськими літерами без пробілів і заголовних
Тепер в файл, який ви тільки що створили, потрібно вставити такий код:
Такий спосіб перетворення фрагментів в плагіни буде працювати в 99% випадків. Це дуже зручно, так як управляти плагінами набагато простіше, ніж вставками в файл functions.php. І, всупереч поширеній думці, навантаження на сайт від такого плагіна більше не, ніж від того ж самого коду, вставленого в functions.
Ще по темі
Доброго дня, Ірино! Наскільки я зрозумів, такі функції є в деяких шаблонах типу Вставити свій CSS або вставити код в "тіло", але ваша функція тільки для functions php, Правильно?
Доброго ранку, Костянтин! Зазвичай у всіх постів до тегу article додаються такі класи:
Функція, яку я взяла за приклад, додасть до постів, у яких є мініатюра, клас has_thumb.
Це може знадобитися, наприклад, якщо Ви хочете, щоб у цих постів був фон іншого кольору, або рамка, або ще що-небудь, що відрізняє їх від посад, у яких мініатюра не задана.
Так, її можна вставити в functions, а можна оформити як плагін. Останній варіант буде набагато зручніше у використанні.
Те, що Ви виставляли в functions, можна по моїй інструкції зробити плагіном. А то, що виставляли в single, також треба вставляти в single 🙂
А я ось намагаюся по мінімуму плагінами користуватися ... але не завжди виходить, тому що кодіть я не дуже вмію.
Мені дуже сподобалася особливо частина поста про те, як зробити з коду плагін! За це окреме спасибі)))
До речі, шорткоди для оформлення статті - це дуже корисна штука, у мене вони з'явилися після установки нової теми, до цього і не знала про них.
Я теж намагаюся по мінімуму, але виходжу з того, наскільки мені та чи інша можливість дійсно необхідна, а не "можна зробити те ж саме без плагіна".
І в результаті у мене зараз коштує 24 плагіна, без яких я не уявляю, що б робила, і ще 4 деактивовані, але включаю їх кілька разів на місяць для виконання спецефических завдань (вони створюють власні елементи в меню, і в підсумку меню не поміщається повністю на екран нетбука, що мене дратує 🙂)
Ірина, то, що з коду можна зробити плагін - для мене стало одкровенням ... Еврика! Ось воно! А адже доводилося записувати в блокнот про внесені зміни, щоб не забути перенести їх при зміні теми ...
Все, що ви запишете в файл functions.php надалі буде втрачено при оновленні WordPress (особливо якщо оновлення налаштоване на автоматичний режим) тому краще на мій взлгяд не покладатися на цей метод а використовувати власні плагіни, як тут пише господиня блогу
Доброго дня, Ірино. Дякую за статтю. Питання мій трохи не по ній а може і по ній. вже зламав всю голову як загугли то що мені потрібно.
Загалом: у мене є сайт, його головна сторінка є довгою онучу (Ледінг) + у нього купа окремих сторінок в яких від першої (головної - Ледінг) залишається тільки шапка і підвал. Що я зробив. 1. нову тему для цього сайту. 2. коди підвалу і шапки виніс в відповідні файли. 3. в файлі page.php теми за умовою is_frontpage () виводиться статична частина Ледінг. Що мені потрібно зробити? найголовніше ці статичні шматки Ледінг зробити редагованими з адмінки. причому зробити це так щоб адміністратор сайту в майбутньому при редагуванні даних блоків тексту не міг порушити верстку теми.
Я вирішував таку задачу двома способами:
1. Реєстрація та висновок віджета (зручно для ШТМЛ). інформації багато як реалізувати.
2. Створення окремий рубрики для блоку. Функцією викликаємо блок. реалізацію робив (штмл + бутстрап)
2.1 створюємо рубрику для блоку в неї потім публікуємо потрібний пост.
2.2. створюємо див в потрібному місці. в діві робимо функцію викликає рубрику із зазначенням кількості постів (можна і 1 пост). циклами і стилями можна задавати стилі і висновок інформації + css
Корисна порада у Вас знайшов. Дякуємо. А щодо оновлень і того, що все злетить, паритися не треба. Робіть дочірню тему і експериментуйте з кодами скільки хочете. Навіть якщо все завалиться, завжди можна відкотитися до батьківської темі. Головною, на всякий випадок, робити дублікати потрібних Вам файлів, щоб все-таки до вести до розуму свою дочірню тему.