• Главная
  • Карта сайта
Не найдено

Виконуваний PHP код в віджети і контенті Wordpress: функції і плагіни

  1. Чому PHP код не працює за замовчуванням
  2. Для чого потрібен PHP в віджети
  3. PHP Code Widget
  4. Навіщо PHP код в статтях і постах WordPress
  5. Плагін для виконання PHP в контенті Exec-PHP
  6. Виконання PHP коду в статтях WordPress без плагіна
  7. недолік

Вітають, друзі. Сьогодні ми з вами розберемося в тому, як змусити працювати будь-який PHP код в віджети, статтях і на сторінках WordPress. За замовчуванням така функція в цій CMS недоступна і максимум, на що може розраховувати користувач - це впровадження HTML коду.

За замовчуванням така функція в цій CMS недоступна і максимум, на що може розраховувати користувач - це впровадження HTML коду

зміст:

Чому PHP код не працює за замовчуванням

Здавалося б, чому розробники не нагородили настільки популярний і зручний движок корисними можливостями з автоматичного виконання PHP коду. Спочатку я думав про це, але прийшов до висновку, що така політика ведеться з позиції безпеки, адже, невміле застосування PHP в віджети або всередині записів може привести до непоправних наслідків - в базі даних що-небудь порушиться і весь сайт крякне.

Тому, робота з PHP віддана на відкуп програмістів або людей більш менш просунутих в цьому питанні - безпосередньо в файлах WordPress тим будь-які скрипти виконуються.

Для публічних сайтів (там, де кілька авторів) виконання PHP в тілі статті підвищується ризик навмисного саботажу, так як будь-який автор може отримати повний доступ до сайту через вікно редагування статей.

За ступенем небезпеки я б розділив всю цю ситуацію на 3 рівні:

  1. Залишити все як задумали розробники - безпечно, випадково або навмисно пошкодити сайт складно.
  2. Дозволити виконання PHP в віджети - середній рівень небезпеки, тільки адміністратор сайту має доступ.
  3. Застосування коду всюди - небезпечно, так як управляти сайтом може кожен хто допущений до редагування статей і сторінок (модератори, автори)

Для чого потрібен PHP в віджети

Питання індивідуальний, так як реалізувати за допомогою цієї мови програмування можна все що завгодно. Особисто мене до написання цього поста підштовхнув замовлення клієнта, сайт якого я зараз роблю. На ньому необхідно було вивести в сайдбарі в окремому віджеті список новин з однієї рубрики - «Новини». У стандартних віджети WordPress немає такої можливості.

Питання стояло між пошуком плагіна з відповідними можливостями або застосуванням нескладного PHP коду. Скрипт для такого завдання, дійсно, невеликий і навантажувати сайт зайвим плагіном, який більше ніде використовуватися не буде, не хотілося.

В цілому, дозволяючи виконання PHP, ми можемо вирішити 2 завдання:

  • Замінити частину плагінів сайту на скрипти і знизити таким способом навантаження на хостинг;
  • Реалізувати функції, для яких плагінів поки не існує.

На першому етапі я розповім про віджети, а потім, окремим блоком про висновок коду в контенті.

Дана категорія плагінів або дозволяє застосування коду в стандартному текстовому віджеті, або створює спеціалізований тип віджета.

Перевага плагінів: При зміні теми оформлення WordPress не порушується робота функцій доданих в шаблон, все продовжує працювати не вимагаючи втручання вебмастера. Хукі додані в шаблон при зміні теми доведеться переносити на нову вручну.

У моєму прикладі вище, я роблю сайт для клієнта і, якщо він захоче самостійно змінити дизайн, то пропадуть настройки, які зроблені через файли functions.php і ін., Тому я максимально спрощую йому управління сайтом, спираючись на плагіни (тим більше, в його ніші трафік невеликий і навантаження багато не буде).

PHP Code Widget

Цей плагін я давно використовую у своїй роботі, він додає в список доступних віджет, схожий на звичайний текстовий, тільки здатний обробляти крім тексту і HTML ще і PHP.

PHP Code Widget присутній в офіційному репозиторії WordPress, легко знаходиться за назвою. Як встановлювати такі плагіни описано тут .

Налаштувань не потрібно, віджет в списку з'явиться відразу після установки і активації плагіна. У сайдбар перетаскуєте «PHP Code» і додаєте туди будь-скрипт.

У цьому випадку нам буде потрібно хук, який буде підміняти стандартну функцію, що забезпечує роботу текстового WordPress віджета, функцією роздільної обробляти PHP.

Такий хук додається в файл functions.php поточної теми (в самому кінці перед закриваючою дужкою?>). Після цього, нових варіантів віджету, як у випадку з плагіном, не виникає, PHP коди починають працювати в стандартному текстовому.

Готовий код:

add_filter ( 'widget_text', 'text_html_php_widget', 100); function text_html_php_widget ($ text) {if (strpos ($ text, '<?')! == false) {ob_start (); eval ( '?>'. $ text); $ Text = ob_get_contents (); ob_end_clean (); } Return $ text; }

Перший рядок є фільтром, який замінює при кожному виклику стандартну функцію текстового віджета на нову - text_html_php_widget, а далі йде опис самої нової функції.

Навіщо PHP код в статтях і постах WordPress

Усередині записів виконуваний PHP код потрібно значно рідше, ніж в віджети, тому в першій частині статті я окремо розглядав сайдбар, щоб ви могли не підключати потенційно небезпечні функції без необхідності.

Але і в постах буває потреба використання скриптів. Найчастіший приклад - це висновок карти сайту без плагіна. Правда, для карти можна використовувати інший прийом - зробити спеціальний шаблон сторінки (це окрема тема).

Мені одного разу знадобилося виводити PHP для наступної мети:

Робив я відео сайт. Серії серіалу виводилися в списках відтворення сезонний і треба було під кожним плейлистом сезону вивести список серій з посиланням на свою сторінку. Схоже на карту сайту, тільки складніше - висновок робити треба було списками окремих рубрик. Можна було вручну HTML кодом кожну посилання прописати, але там кілька сот серій і процедура марудна. Тим більше, при появі нової серії посилання на неї довелося б додавати вручну - незручно. Ось я і вирішив використовувати PHP функції для реалізації.

Плагін для виконання PHP в контенті Exec-PHP

Незважаючи на те, що цей плагін не оновлювався вже 7 років, він прекрасно справляється з обов'язками. І я його вибрав не просто так - він не використовує ніяких шорткодов, як конкуренти, а дає можливість вставляти в запису WordPress код в чистому вигляді, починаючи з <? Php і закінчуючи?>.

Плагін Exec-PHP є в репозитарії і встановлюється через меню в адмінці движка.

Плагін Exec-PHP є в репозитарії і встановлюється через меню в адмінці движка

З налаштувань є тільки одна - дозвіл / заборона на виконання коду в текстовому віджеті, можливості відключити роботу в постах і на сторінках відсутня, якщо треба її прибрати - деактивувавши плагін.

Для вставки PHP коду в статтю, редактор WordPress повинен бути переведений в HTML режим (вкладка «Текст»). Візуальний режим, швидше за все, код попсує.

Рекомендую робити так: наповнюємо і налаштовуємо сторінку в візуальному редакторі, коли все готово - перемикаємо в текстовий і додаємо виконуваний код - зберігаємо.

Виконання PHP коду в статтях WordPress без плагіна

За аналогією з віджетами, ми можемо замінити плагін на спеціальну функцію, що дозволяє виконання PHP скриптів в контенті. На жаль, мені не вдалося знайти варіант, при якому код працював би автоматично як у випадку з плагіном, реагуючи на теги. Потрібне використання шорткода. Моїх знань в PHP не вистачило для самостійного написання потрібної функції, за сім привожу як є. Робота з шорткодом має істотний недолік, що ускладнює роботу, про нього я розповім нижче.

Як працювати з описаної нижче функцією

  1. Вставляємо її в файл functions.php теми;
  2. У потрібному місці статті вставляємо конструкцію - [startphp] виконуваний код без <? Php і?> [/ Startphp]

функція:

/ * Запуск php в статтях і сторінках WordPress: [startphp] код [/ startphp] * / function start_php ($ matches) {eval ( 'ob_start ();'. $ Matches [1]. '$ Inline_execute_output = ob_get_contents (); ob_end_clean (); '); return $ inline_execute_output; } Function inline_php ($ content) {$ content = preg_replace_callback ( '/ \ [startphp \] ((. | \ N) *?) \ [\ / Startphp \] /', 'start_php', $ content); $ Content = preg_replace ( '/ \ [startphp off \] ((. | \ N) *?) \ [\ / Startphp \] /', '$ 1', $ content); return $ content; } Add_filter ( 'the_content', 'inline_php');

недолік

Якщо всередині вставляється PHP коду є HTML вставки або текст, то він працювати не буде. Будь-який текст або теги доведеться вставляти за допомогою команди echo, що не завжди зручно. Тобто, код повинен бути чисто PHP-шний на 100 правильного формату.

правильно

[Startphp] echo '<a href="https://biznessystem.ru"> Так працювати буде </a>'; [/ Startphp]

неправильно

[Startphp] echo '<a href="https://biznessystem.ru"> Цей рядок правильна </a>'; <a href="https://biznessystem.ru"> Так працювати не буде </a> [/ startphp]

В плагіні Exec-PHP такої заморочки немає - і текст і HTML здійсняться, але все елементи PHP коду повинні бути обрамлені в відповідні теги.

Для багатьох веб-майстрів тема, описана в цій статті відкриває нескінченні можливості для творчості - можна реалізувати те, чого раніше зробити не виходило, а також позбутися від маси плагінів, замінивши їх на різні фільтри, функції і хукі.

В самому кінці перед закриваючою дужкою?
Text, '<?
І я його вибрав не просто так - він не використовує ніяких шорткодов, як конкуренти, а дає можливість вставляти в запису WordPress код в чистому вигляді, починаючи з <?
Php і закінчуючи?
Php і?
Startphp \] /', 'start_php', $ content); $ Content = preg_replace ( '/ \ [startphp off \] ((. | \ N) *?
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью