Всем привет! Сегодня на seo-mayak.com я расскажу как избавиться от еще одного плагина, который многие используют для вставки кодов на PHP в виджет WordPress.
После выхода статьи «Популярные записи с миниатюрами в сайдбаре без плагина» мне написал один товарищ и пожаловался на то, что представленные мной коды не работают и мол зачем вы публикуете всякий «шлак».
Я постарался проявить сдержанность и посоветовал горе-вебмастеру установить плагин PHP Code Widget.
Но потом я понял, что сам виноват. Ведь действительно, я ни словом не обмолвился от том, как вставлять PHP в виджет.
Наверное мне казалось, что все знают, как это делается, но я ошибся и сегодня хочу исправить сей недочет.
Многие веб-мастера, для выполнения PHP-кодов в виджетах WordPress, используют плагины. Один из-них я уже назвал выше, но стоит отметить еще один плагин, который называется Exec-PHP.
Данный плагин может заставлять работать PHP-коды не только в виджетах, но и на страницах с записями. До некоторых пор я сам его использовал.
Итак, по умолчанию в WordPress виджеты не поддерживают PHP, правильно, ведь для этого есть файл sidebar.php, через который при желании можно реализовать вывод любой функции.
Но дело в том, что современные шаблоны, например сверстанные на основе kubrick, без специальных знаний не позволяют вставлять в sidebar.php вообще какие-либо коды. Поэтому для многих тем виджеты остаются единственным вариантом.
Использование плагинов конечно выход из положения, но как я уже много раз говорил, если есть возможность, то лучше обойтись без них. Поехали!
Вывод PHP-кода через виджеты WordPress без плагина
Давайте заставим WordPress выполнять PHP коды в виджетах. Сложного в этом ну вообще ничего нет.
Открываем для редактирования файл functions.php, ищем знак ?>, в некоторых темах ob_end_clean(); и перед ним вставляем следующий код:
function mayak_widget_php($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', 'mayak_widget_php', 99);
Теперь любой PHP-код будет выполняться в виджетах. Все просто! О плагинах не может быть и речи.
Кстати, вскоре я планирую рассказать, как сделать дополнительный блок виджетов в подвале сайта, кому интересно, советую подписаться на обновления блога, чтобы не пропустить интересный материал.
До встречи!
С уважением, Виталий Кириллов
Спасибо, Виталий! Скопировала вашу функцию, вставила в functions.php, проверила: все действительно работает, и как итог — удалила плагин Exec-PHP.
А как сделать выполнение php кода в статье и на страницах подобным методом без плагинов?
Пока проблема!
Спасибо огромное, наконец-то действительно полезное чтиво
Виталий, здравствуйте!
С интересом читаю статьи блога, очень нравится ваш стиль изложения такой сложной для новичков информации. Но применить у себя эти нужные рекомендации не могу… Дело в том, что на моем блоге файл functions.php не содержит ни знака ?>, ни ob_end_clean().
Мне крайне важно вывести PHP-код в виджет. Может, подскажете, как это сделать. Спасибо.
Татьяна, в самом начале файла functions.php есть такой знак «<?php» можно вставить функцию сразу после него.
У меня тоже не так такого. Но я вставил в конце файла..и нормально. Надо было вам тоже так делать.
Виталий, спасибо большое!
Ваш метод мне отлично помог. Могу ли я уточнить некоторые сложные для меня вопросы через обратную связь?
Татьяна, если только их не будет много.
Спасибо! Пока только относительно виджета))
Виталий, несколько раз пыталась отправить вам сообщение, но почему-то не сработала форма обратной связи — какие-то проблемы с окном «Тема».
Спасибо большое, что помогли мне разобраться с кодом PHP для виджета. Если вас не затруднит, подскажите, пожалуйста, как мне подкорректировать контуры этого виджета. Моя тема позволяет вставить виджет через модуль ТЕКСТ, который состоит из окна для названия и окна для самого содержания.
Сейчас у меня размещено все это в сайдбаре криво: окно с содержанием немного смещено вправо и еще немного наползает на окно с названием. Лечится ли мой случай? Буду бесконечно признательна, если подскажете, как мне это поправить.
Татьяна, откройте файл style.css, что находится в папке с темой и найдите там строчку №1507. Там между фигурными скобками надо удалить строчку:
и вставить:
Виталий, выполнила все по вашей инструкции, но, увы, не помогли эти действия((
Виталий, как же я Вам благодарна! Спасибо за такую детальную инструкцию. Благодаря Вам, виджет на моем блоге теперь в порядке.
Спасибо большое за простую реализацию размещения php-кода в виджетах! В прошлой теме все в шаблон внедрял, а в новой теме разработчики так намудрили, что простому смертному не разобрать 🙂 Поставил на сайт — все работает! Криво виджеты отображались, а сейчас все как нужно.
Было полезно.
Спасибо большое!
Подскажите пожалуйста, а как можно вставить php код в миню сайта?
хочу чтобы в меню отображалось имя текущего залогиненного пользователя, или «гость», если человек не залогинен
Вы имеете в виду вставить php код в виджет?
я имею ввиду вставить php-код, как один из пунктов миню.
чтобы был вид: главная, пункт2, пункт3, о нас, контакты, добро пожаловать %name
Немного не пойму Вашу задумку. Зачем использовать php, если можно обычную ссылку прописать.
как в обычной ссылке прописать переменную, которая отображала бы имя залогиненого пользователя?
если в названии пункта меню ввести просто «добро пожаловать %name» или любую другую переменную, она так текстом и отобразится
Согласен, спорол чушь, забыл тему предыдущего вопроса. Вот попробуйте код вывода имени пользователя:
Прикрутить к меню не сложно, просто надо подставить код после функции меню и довести в нужное место с помощью стилей.
да, забыл сказать что это все делается на связку вордпресса и вукомерси….. это прям другой мир, кто за что отвечает, тема или сам вукомерси, уже наверное никто не разберется…..
ваше решение конечноже очевидно, но мне не удалось встроить код именно в меню.
он появляется выше, ниже… где угодно, только не там, где надо.
именно по этому и возник вопрос про пункт меню, как таковой.
Какой функцией у Вас меню выводится?
в среду буду на работе запощю кусок кода сюда.
спасибо за ваше внимание к моей проблеме -))
если я правильно понимаю, то код такой:
function storefront_primary_navigation() {
?>
<nav id="site-navigation" class="main-navigation" role="navigation" aria-label="<?php esc_html_e( 'Primary Navigation', 'storefront' ); ?>">
<button class="menu-toggle" aria-controls="primary-navigation" aria-expanded="false"><?php echo esc_attr( apply_filters( 'storefront_menu_toggle_text', __( 'Navigation', 'storefront' ) ) ); ?></button>
<?php
wp_nav_menu(
array(
'theme_location' => 'primary',
'container_class' => 'primary-navigation',
)
);
wp_nav_menu(
array(
'theme_location' => 'handheld',
'container_class' => 'handheld-navigation',
)
);
?>
</nav>
К функции wp_nav_menu нет возможности прикрутить стороннею функцию. Я все же думаю, что можно с помощью css вывести строчку в нужное место, просто надо правильно прописать стили.
спасибо за потраченное на меня время…
Спасибо ! Очень помогли кода вставляешь шорткоды ! или какие то другие вещи ! Огромное спасибо !
Спасибо за пример, очень помогло. Заработало сразу.
Виталий, здравствуйте! У меня есть коды словарей РНР. Я бы хотела, чтобы в виджете эти словари были просто перечислены списком, и чтобы по клику открывались на отдельной странице. Пока что я их ставила по одному как запись, и выглядят они так:
yaimoyotelo.ru/slovar-kosmeticheskikh-terminov/
Один вообще весь сайдбар вниз сдвигает. Можно ли их все как-то в виджет засунуть? И куда нужно код вставить?
Заранее спасибо.
Здравствуйте Татьяна!
Сделать можно все, но сходу я Вам не подскажу.
С каждым случаем надо разбираться индивидуально.
Набирайтесь знаний и у Вас все получится.
Спасибо! Работает! Тоже удалил Exec-PHP
Здравствуйте!
Что делать, если не найду ?> и предложенный вами код пытаюсь вставить сразу же после ?php не дает результатов?
Спасибо, очень помогло! Как раз делаю себе сайт на WP и решил сделать шаблон страницы, которую можно полностью наполнять через виджеты (так проще редактировать контент и его расположение, да и шаблон, при необходимости из HTML натянуть проще будет). Так что статья как нельзя кстати!)))) Автору — респект и +100000 в карму)
А у меня как раз реклама Adsense на одной странице нарушала правила. А выводилась она у меня через виджеты темы. Оборачивал оборачивал рекламный код гугла php функцией и так и сяк, только потом дошло, что в виджетах php код то не выполняется. Стал искать как сделать, чтобы php выполнялся в виджетах и набрел на вашу статью.
Спасибо. Было полезно. Всё получилось легко и просто.
Хорошая статья, но сейчас в вордпресс коды сложно вставить. Просто не сохраняет правки. Поэтому брожу в поисках плагина вывода похожих записей (причем легкого по весу и настройкам), либо (если уже такое придумали) кода вывода записей только в виджете.