Всем привет!
Сегодня я хочу рассказать о том, как вставить исполняемый php-код в записи и страницы сайта на WordPress. Делать мы это будем опять без использования плагина, а поможет нам в этом плагин! =) Как бы парадоксально это не звучало. На самом деле мы просто подсмотрим как реализовать необходимый нам функционал в плагине Inline PHP (дословно – встроенный в строки php). Заодно возьмем на вооружение этот прием – использования кода из плагинов для реализации задач без использования плагина. Надеюсь, заковыристое вступление не отпугнуло вас. Приступим!
Итак, перед нами стоит вопрос: “Как вставить php код в статью WordPress?”. Но вставить не в качестве содержимого статьи, а в качестве исполняемого кода, который выведет результат своей работы в определенное место статьи.
Например, для поощрения комментаторов вы делаете материальные вознаграждения за каждый сотый комментарий. Но, никто не видит сколько у вас этих комментариев на данный момент и действительно ли вы платите именно за сотый, а не за сто третий комментарий, сделанный вашим другом.
Вообщем, для большей прозрачности подобного рода мероприятий было б хорошо, чтобы в статье, в которой описываются правила получения данного вознаграждения, выводилось текущее число комментариев на блоге. Естественно, значение этого счетчика должно увеличиваться при добавлении новых сообщений. Вот в таком случае и удобно использовать php код внутри статьи (страницы), который будет восприниматься не как текст, а именно как код к исполнению, и результат своей работы будет выводиться в статью.
Это всего лишь один из примеров, для реализации которого нам понадобится встроенный в записи php код. В желании сделать статьи своего блога оригинальными вы, наверняка, придумаете массу других “фишек”. Вот, например, у меня есть статья “Случайный комментатор”, часть содержимого которой формируется динамически.
Кстати, статьи с внедрением кода и динамически формируемых элементов в некоторых случаях затрудняют “копипаст” (copy and paste; копирование и вставку – воровство контента) или делают его невозможным.
Ближе к делу – нужно вставить php код в статью. Нахожу достаточно популярный плагин, который даёт такой функционал – Inline PHP. Поскольку я стараюсь использовать плагины по минимуму, то не устанавливаю этот плагин, а изучаю его код и беру оттуда то, что нужно. Вношу некоторые изменения и вуаля!
Вот код, который нужно вставить в файл functions.php вашего активного шаблона WordPress:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* Исполняемый код php в статьях/страницах WordPress: [exec]код[/exec] ----------------------------------------------------------------- */ function exec_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('/\[exec\]((.|\n)*?)\[\/exec\]/', 'exec_php', $content); $content = preg_replace('/\[exec off\]((.|\n)*?)\[\/exec\]/', '$1', $content); return $content; } add_filter('the_content', 'inline_php', 0); |
Для тех, кто хочет понять и разобраться что происходит в коде – посмотрите статью “Вставка кода php в виджет без плагина”. Там код очень похож на этот и даны подробные разъяснения. Вы поймете алгоритм. Повторяться здесь по этому поводу не буду.
Теперь о том, как использовать добавленные нововведения.
Вот пример того, как внедрить в статью php-код к исполнению:
1 2 3 |
[exec]echo "Этот текст выведен с помощью php функции echo";[/exec] |
А вот так можно вызвать функцию hello_world(), которую мы с вам создали в прошлой статье о файле functions.php:
1 2 3 |
[exec]hello_world();[/exec] |
Если будете использовать встроенный php код в записях своего блога, то для большей безопасности рекомендую вместо exec придумать свой тег для запуска. Просто замените “exec” на что-то другое в том коде, который размещаете в functions.php. И потом при вставке кода в статью используйте эти свои теги, чтобы никто не воспользовался потенциальной “дырой”, которую, возможно, создает внедряемый php код.
Еще хочу добавить, что если вы используете на своем блоге какие-то плагины кеширования, то не забывайте, что эти статьи с внедренным php кодом тоже будут кешироваться и это отразится на выводимых для посетителей результатах. То есть, возвращаясь к нашему примеру с общим количеством комментариев, такую статью нужно либо добавлять в исключаемые для кеширования URI, либо сообщить читателям, что данные будут изменяться раз в час (в сутки и т.п.), в зависимости от вашего интервала обновления кеша.
На этом хочу закончить. Надеюсь, все понятно и вы разобрались с этим вопросом.
Напишите используете ли вы в своих статьях исполняемый код php? Если используете, то для каких целей?
Спасибо за внимание. Безошибочного вам исполнения кода! =)
Хорошая и полезная статья, как и сайт в целом. Давно хочу разобраться с php код, уже хочется начать работать самостоятельно. Много видео различных есть, а тут наткнулась на личного консультанта ))) Надеюсь вы не против будете Алексей если к Вам по средству комментариев с вопросом обратиться.
Спасибо, Мария!
Личный консультант может вам дорого обойтись =)
Пишите-пишите, будет время – обязательно отвечу.
Обещаю я не буду настойчивой, да и пока мне не до этого. Много другой работы. А вы оказывается программист. А верстать сайты на WordPress можете? Я сейчас себе дизайн рисую нужен будет верстальщик. Хотя я тут уже как бы заочно с одним договорилась. Трудности с дизайнером немного возникли, поэтому жду пока нарисуют мне шаблон сайта.
Проблем много. А,кстати есть вопрос. У меня медленно загружались страницы на сайте, я воспользовалась дополнительной услугой своего хостинга персональный веб сервер. Вроде по началу страницы сайта стали хорошо грузится, а потом вообще, что-то стал зависать. Я написала в техническую поддержку, а они сказали дословно: Попробуйте убрать с сайта информацию, отображаемую с ресурса smartresponder.ru . Вероятно, это решит проблему.
Я убрала подписку на рассылку и действительно проблема исчезла. Вы как специалист можете сказать, что это за проблема. Ведь тут проблема скорее всего в коде.
Версткой сайтов не занимаюсь.
Подключение любых скриптов сторонних сайтов, конечно же, замедляет загрузку страницы. Даже те же счетчики посещаемости вносят свою лепту в этот процесс.
Рекомендую воспользоваться сервисом gtmetrix.com для подробного анализа скорости загрузки вашего ресурса. Там будет показано время загрузки каждого из элементов сайта и даны рекомендации, применив которые вы сможете улучшить время отображения веб-страниц.
Я планирую писать и на эту тему. И в моём блоге есть ещё много чего оптимизировать. Возможно, почерпнете и для себя что-то новое и полезное.
Спасибо Алексей за ответ.
Привет. Спасибо за данный код. Есть вопрос. Какие версии WordPress поддерживаются? Проверялось ли на 3.x-3.8.x?
Привет, Тимур.
У меня на 3.х работает. Собственно, в коде нет ничего такого, что требовало бы отдельных проверок на совместимость. Хуки по любому будут работать в WordPress – это одна из основных фишек структуры WP, а остальной код – на чистом php, без использования каких-то стандартных функций WP.
Тогда посмотрим. Кстати хуки это очень сильная штука, когда начал немного смотреть в сторону кода WP и смотреть кодекс, сразу полюбил за это еще больше.
Появилась возможность и решил проверить на всякий случай для WP 3.8.1 – код работает как положено, без ошибок. Так что можно смело использовать и уверен, что в будущих версиях WP с этим кодом проблем не возникнет. Пока будут живы хуки и функция the_content – все будет ок. =) Разве что в php что-то поменяется, но это тоже сомнительно, поскольку там тоже сохраняют совместимость устаревших функций при разработке новых версий.
Спасибо, что нашли время и сделали это. Буду внедрять тогда именно этот код. Мини совет, может кнопки соц. сетей внизу поста выводить, а то я как-то не разобрался как твитнуть и т.д. Думал, что наверху, это страницы ваши в соц. сетях.
Спасибо за ретвит статьи.
Кнопки соцсетей слева вообще не заметны? В какой-то мере это хорошо, что не навязчивы, но раз не смогли сразу найти, то плохо =)
Да, вверху я переделаю на ссылки в соцсети, а с этими скользящими еще подумаю, может, действительно – после статьи будет более привычный для большинства читателей вариант. Спасибо.
Пожалуйста, мне не трудно. Полезные вещи всегда ретвичу. Даже сохраняю в закладках, целая папка в Google Chrome есть. Про сец. кнопки, просто я привык, что либо внизу статьи, либо сбоку плавает. Ведь после прочтения статьи появляется вывод, стоит или нет ставить лайки и т.д.
Статья хорошая! Но, к сожалению, include не работает в нем, а хотелось вставить кусочек другой страницы. У Вас, автор, include инклюдит, если поэкспериментировать?
Здравствуйте! У меня не работает
Вставил в функцион пхп вот такой код:
а в статьях вставляю вот так:
Спасибо за статью. Но у меня не получилось разобраться. При внесении этого кода в файл function.php почему-то выдаёт ошибку, даже если php-код в запись не вставлен. Как думаете, в чём может быть проблема? Может, кодировка самого текста неправильная?