Добавление PHP-кода в виджеты WordPress без использования плагинов

По умолчанию виджеты поддерживают только обычный текст и HTML-код. Но люди очень часто сталкиваются с необходимостью вставки в виджет кода PHP, например при установки Sape.

Конечно, есть уйма плагинов, позволяющих это реализовать, но мы, как обычно, воздержимся от их использования и всё, что потребуется — это вставить следующий код в functions.php текущей темы:

function php_in_widgets($widget_content) {
	if (strpos($widget_content, '<' . '?') !== false) {
		ob_start();
		eval('?' . '>' . $widget_content);
		$widget_content = ob_get_contents();
		ob_end_clean();
	}
	return $widget_content;
}
 
add_filter('widget_text', 'php_in_widgets', 99);

Та-дам, теперь можете добавлять PHP-код в текстовые виджеты. И никаких плагинов.

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 12

  • Ольга13 ноября 2012 в 15:11 #

    Спасибо, Миша!!! Только недавно уже установила похожий код, до этого пользовалась плагином. Эту статью немного бы пораньше - но думаю другим это будет очень полезно. -1 плагин +скорость работы блога.

    • Миша13 ноября 2012 в 16:11 #

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

  • Nurlan26 ноября 2012 в 11:11 #

    Меня очень смущают эти строки:

    eval('?' . '>' . $widget_content);
    $widget_content = ob_get_contents();

    Пож. объясните.

    • Миша26 ноября 2012 в 21:11 #

      Добрый день, Нурлан!
      в данном примере функции ob_get_contents, ob_start, ob_end_clean нужны для буферизации вывода, то есть всё, начиная с функции ob_start вместо того, чтобы выводиться, записывается в буфер.
      Если у вас ругается антивирус, то возможно проблема в eval, так как она выполняет PHP-код, содержащийся в виджете.

  • Илья11 января 2013 в 14:01 #

    Подскажите пожалуйста, может немного не по теме, но все-таки...вот есть стандартный виджет "Свежие записи". Где можно просмотреть код этого виджета, дабы внести изменения в него (хочу миниатюры постов в сайдбаре вывести через стандартный виджет)?

    • Миша11 января 2013 в 20:01 #

      класс виджета свежих записей находится в этом файле
      wp-includes\default-widgets.php, начиная с 527й строчки)

  • Сергей5 июня 2013 в 11:06 #

    А как обойтись без eval? Antivirus ругается... Не опасно ли использование данного кода?

    • Миша5 июня 2013 в 12:06 #

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

  • prostolinux28 мая 2014 в 11:05 #

    Скажите, а как навигацию сделать как у вас тут кнопки справа и влево экрана?

    • Миша29 мая 2014 в 06:05 #

      1. добавить две ссылки в HTML сайта, расположить их при помощи position:fixed,
      2. сами ссылки генерируются функцией get_adjacent_post()
      как-то так :) могу на следующей неделе написать об этом пост.

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

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.
  • Миша: Привет ещё раз, не поверишь, реально не сталкивался с этим вопросом. По теории можно сказать следующее: во-первых,...

  • Миша: Привет, вообще без проблем, делаешь всё через require(), require_once() - выбирай любую, какая больше нравится.

  • Виталий Моргунов: Привет! Не могу разобаться, как я могу контролировать порядок подключения стилей. В моем случае мне нужно чтобы стили...

  • Миша: Спасибо!

  • w0rmak: Это было просто. Нашел код в интернете. Добавьте и себе ymaps.load(function () { var input = document.getElem...