Здравствуйте, друзья.
За время существования блога мне несколько раз приходило в голову выполнения php кода на его страницах. Но после более тщательного обдумывания находились замены в виде самостоятельных страниц или видоизменения идея до применения в другом ключе. Хотя плагины выполнения кода существуют, несколько из тех, что попробовал, совершенно не понравились. Одни из них требовали предварительного создания кодов с последующей вставкой с помощью шорт-кодов. Другие позволяли добавлять код при помощи стандартной для php конструкции <?php ?>, что исключало, порой, использование в визуальном редакторе — я с ним не работаю, но знакомым проще работать именно так.
Вообще, для моих нужд вполне было бы достаточно найти способ подключить какой-либо php файл в WordPress с помощью include. Сходу такого не нашёл, поэтому сделал небольшой плагин.
Подключение скриптов выполнить очень просто, используется такая специальная инструкция:
[include=/путь/к/файлу/от/корня/wp/имя-файла.php]
На данный момент можно подключить только 1 скрипт. Целесообразность внедрения нескольких пока под вопросом, но если потребуется, можно сделать.
Данную инструкцию нужно вставить в требуемом месте. Помимо этого, есть возможность передавать скрипту GET-параметры в стандартном виде, отделив их в строке подключения через знак вопроса и перечисляя через амперсанд. Пример:
[include=/путь/к/файлу/от/корня/wp/имя-файла.php?a=1&b=2]
Это создаст новые параметры в суперглобальном $_GET-массиве: $_GET[‘a’] = 1 и $_GET[‘b’] = 2. После исполнения скрипт данный массив вернётся к первоначальному состоянию.
Возможно, кто-то задастся вопросом, почему было бы не внедрить для кода что-то вроде [phpi][/phpi], в котором исполнять произвольные php инструкции с помощью функции exec. Но дело в том, что WordPress усердно занимается автоматическим форматированием, щедро снабжая код тегами <p></p> и <br>. Отключать данную особенность в плагине глобально будет плохим решением. Таким образом, пришлось бы выполнять обратную операцию, для предварительной чистки имеющегося программного текста с его дальнейшим исполнением, что может повлечь потенциальное нарушение логики работы внедрённого кода.
На мой взгляд, самое оптимальное решение — подключать php файлы в требуемое место. Разработчики WordPress, скорее всего, специально отказались от данной возможности. Но отдадим им должно за то, что оставили лазейку в виде плагинов, с помощью которых это можно реализовать.
Для установки можете скачать архив с плагином и установить его с помощью стандартных средств — находясь в админке пройдите в Плагины → Добавить новый → Загрузить плагин. Выберите дистрибутив и установите. Второй вариант — самостоятельно залейте распакованный архив по FTP, папку (отсчитывать от корня блога!) ./wp-content/plugins/. В любом случае, после выполнения в этой папке появится каталог phpinclude.
Чтобы подключить, пройдите по ссылке меню Плагины, и у PHPinclude кликните Активировать. После этого можно добавлять, с помощью специальной конструкции, выполняемые php файлы к своим постам. Данные файлы нужно заливать по FTP, в любой удобный подкаталог сайта.
Практически любой плагин снижает (хоть и не на много) производительность WordPress. Поэтому настоятельно рекомендую использовать PHPinclude только в том случае, если это действительно необходимо.
Если есть какие-то пожелания или замечания по работе PHPinclude, оставляйте их в комментариях. Постараюсь оперативно разрешить все вопросы.
Список изменений и дополнений
Список изменений -- ----------------------------------------------------------------------------- [0.3b] Проделана большая работа, перепилено едва ли не всё. Добавлены альтернативные способы подключения скриптов. Помимо основного: [include=] <?include=?> <?include=?> Общая канва вызова имеет вид: [include=cache:path?params] где: cache — время жизни кеша, в секундах. Кешируется результат работы скрипта! Имеет смысл использовать для скриптов, формирующих HTML на основе сложных выборок; path — путь к файлу от корня сайта (если начинается со слеша), либо имя файла в папке scripts плагина; params — параметры в виде k1=v1&k2=v2. Поддерживаются массивы k[1]=10&k[2]=20 [Примеры работы] [include=test.php] подключить файл test.php, находящийся в папке scripts плагина [include=/script/test.php] подключить файл test.php, находящийся в папке script корня сайта — http://site.name/script/test.php [include=60:test.php] — кешировать результат работы на 60 секунд [include=test.php?arr[key1]=1&arr[key2]=2] — вызвать скрипт с параметром-массивом $_GET['arr'] [Прочие плюшки] — плагин обзавёлся настройками; — можно управлять файлами в папке scripts: создавать/удалять/редактировать; — есть возможность установить перехват буфера вывода — полезно, если скрипт должен сохранять данные между запросами; — теперь можно инклюдить несколько файлов на страницу; — прочие улучшения. [0.2.1b] Исправлена неприятна ошибка, 2 и более точки в путях заменялись на слеш. Павлуха — http://pavluha.net/ — огромное спасибо за этот момент! [0.2b] Первая публичная бета-версия. Подключение файла выполняется так: [include=/путь/к/файлу/от/корня/wp/имя-файла.php] Скрипту можно передавать GET-параметры: [include=/путь/к/файлу/от/корня/wp/имя-файла.php?act=1&subact=2] Перед выполнением скрипта будут созданы следующие параметры: $_GET['act'] = 1; $_GET['subact'] = 2; При этом, текущий $_GET-массив сохранится, а после выполнения скрипта будет восстановлен до первоначального состояния. Добавлено вырезание тегов параграфов (<p></p>), которые автоматом добавляет WP, перед и после вставки результатов работы кода [0.1b] Первая бета-версия. Позволяет внедрять php-файлы прямо в посты. Делается это с помощью: [include=/путь/к/файлу/от/корня/wp/имя-файла.php]
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
При росте посещаемости моего блога стало уменьшатся среднее количество просмотров. Сейчас думаю над тем, как увлечь пользователя просматривать больше страниц. Возможно, такой плагин способен принести «дополнительную полезность» для пользователя. Вот только не представляю, что именно с его помощью можно реализовать.
Можно попытаться подстроиться под пользователя, выводя то, что ему должно быть интересно.
Но лучше сработает какой-нибудь хак на клиенте (выполненный на JavaScript), который при закрытии вкладки ранее XX секунд, допустим, будет спрашивать у пользователя, почему он так быстро покидает сайт и выводить на экран похожие записи, или скроллить страницу вниз, просить написать комментарий, в общем, хоть как-то отреагировать; допускаю, что такой трюк вызовет бурное негодование у некоторых.
Сейчас это всё голословно, но если будет идея, можно провести тестирование по удержания юзеров разными способами.
Я бы лучше придумала какие-нибудь калькуляторы или психологические тесты с предложением в сайдбаре, чтобы это было ненавязчиво. Но не будет ли это серьезной нагрузкой?
Если вынести всё на клиент, для сервера это будет практически незаметно. Если такие вещи требуют осуществления запросов к сторонним ресурсам, можно у себя создать скрипт, который выводит входные данные/промежуточные результаты/итоги в html с «подключить» его в сайдбаре через iframe (как обычный HTML). Правда, есть и минус — кто-то может использовать его на своём сайте, но это ведь будет являться ссылкой, так что снова плюс получается.
Еще раз убеждаюсь в том, что нет ничего невозможного. Если эту мысль хорошенько обдумать, уверена, это будет большой плюс сайту.
Надежда, вот как раз «обдумать всё хорошенько» и является самым сложным
Если сайт ничего не продаёт, остаётся держать ориентацию на проводимое время / количество комментариев.
У меня мозга не хватает, как можно завлечь народ и понравить сайт.
Ну на этом сайте я бы вывела предложение проверить, насколько ты знаешь … ну что у вас там программистов самое простое?
Увлечь человека например проверить свой мастерский уровень, выдать ему какой-нибудь виртуальный диплом
Получат 3 человека дипломы ГУРУ веб-разработки, и снова никому будет не интересно. Хотя даже 3 человека — это плюс к пребыванию на сайте.
Надежда, ты просто мега-мозг генератор идей
О, премного благодарна Но как говорят американцы, если ты такой умный, почему не такой богатый? Мне бы найти из кучи всех этих идей одну стоящую
А если пробовать всё подряд, но в lite-варианте? Наверняка какая-нибудь выстрелит ;-)
Пока со скрипом начинает получаться интернет-бизнес, если его можно так назвать. Но работать еще… впрочем, как и везде. Потом возможно и другими идеями займусь.
Но ведь начинает получаться! А начинать новое крайне сложно.
Сейчас желаю тебе, Надежда, всяческих успехов, и в перспективе чему-нибудь самому научиться.
Спасибо, Andi Прорвемся, думаю. Как говорится, не святые горшки лепят. Главное просто оттачивать свои умения, накапливать знания. Как говорится, успех — дело техники
Чтобы 100% продвинуться в Яндекс, нужно купить Яндекс
Есть, к чему стремиться.
Я не уйду с твоего сайт сегодня ))))
Купить Яндекс — это конечно круто, да, неплохая цель. Но мне хватит и своего маленького сайта с посещаемостью хотя бы полляма. Тогда можно и на раннюю пенсию
Мой провайдер решил иначе, оключился интернет (только на сайт прова доступ был), так он ещё и гостевую вырубил, чтобы пользователи, стало быть, не доставали расспросами
Как же пенсия, а развивать проекты кто будет? Не-не, никакой пенсии, только плодотворная полная занятость)
Ну вот, на пенсию не отпускают ) А я мечтаю когда-нибудь заработать столько денег, чтобы объездить весь мир. Очень хочу увидеть руины Греции, Баальбек, руины древних цивилизаций в Америке…
Но пока конечно нужно пахать ))))
Не в пенсии счастье, а в её количестве: депутат РФ, стаж 5 лет, сумма — 150к/месяц
Надежда, желаю осуществление мечт, тем более они такие красивые и познавательные!
Интересная штуковина. Пока не придумал, как это можно применить, но код посмотрел и взял на заметку. Не понял только этого:
preg_replace('!\.{2,}!', '/', $PHPi_file); # заменить несколько точек на одну
Если и правда зачем-то нужно заменять несколько точек на одну, то в данном случае они заменятся на слеш
Я использую, например, в этой статье, вывод списка изменений/дополнений ;-)
Да, это ошибка, огромное СПАСИБО!
Несколько точек на одну заменить на случай таких шляп /../../ в запросе. Ну мало-ли, как там путь соизволят вставить.
А, понял. Запретил самому себе шариться по серверу глубже корня сайта.
Для удобства надо админку скрипту добавить, чтобы её могли посещать пользователи с привилегиями не ниже администратора. И в админке загружать скрипты в отведённую для этого папку. И про путь можно вообще забыть (при вставке хэштега в пост указывать только имя скрипта), и в файловую систему не придётся лазить
По поводу админки думал, и хранить тогда скрипты прямо в директории с плагином можно.
Но вот что действительно может понадобиться, так это вырезание всех проставленных тегов при удалении плагина. Как-то не задумывался об этом, а тут торкнуло. Как думаешь, нужно ли заморачиваться насчёт этого?
Да, если кто-то решит удалить плагин, то в постах могут непонятные штуки остаться. Надо удалять, только с предупреждением, что процедура необратимая. Как обычно, больше интерфейса, чем самой работы — один mysql запрос update)
И дополнительно ещё кнопочку сделать, для принудительного удаления из всех записей.
И скрипты не загружать, а сразу редактировать.
И… да фиг знает сколько всего можно сделать. Но нужно ли это кому будет?
У авторов плагина Hyper Cache видел плагин со схожим функционалом. Плюс: там есть возможность инклуда в ифрейм. Минус: в php-инклуде они не продвинулись даже до отправки параметров. В общем-то, кому-то это нужно значит.
А если фантазировать, то ещё редактор кода с подсветкой синтаксиса)
Ага, значит, что-то подобное есть.
А параметры у меня тоже только простые принимает, массив не взлетит, хотя можно добавить и такое, если кому-нибудь реально будет нужно, но тогда придётся менять примитив вызова, дабы квадратные скобки не усложняли быстрое получение кусочка для плагина. Может, даже на <include=path/file>. Из плюсов — не будет плагина, всё равно не выведется на страницу. Из минусов — придётся обрабатывать вариант <include=path/file>
Кстати, можно ещё больше усложнить и дать возможность добавлять несколько файлов. И не только для поста, но и для виджетов. ИМХО, эти пункты изврат какой-то уже, не знаю пока, нафига оно кому может понадобиться.
Кстати, интересный плагин. Можно использовать, например, для демонстрации кода в работе… Хотя, при такой нужде я бы тоже наверное пошёл по пути создания отдельных страниц, не привязанных напрямую к WordPress…
Александр, спасибо на добром слове
В первую очередь, делалось для себя и сейчас успешно используется. Скорее всего, для подавляющего большинства не нужно. Новичкам сложно, профи и так знают, что и как сделать.
Установил, активировал.
Записал в страницу через редактор запись:
[include=/wp-content/plugins/phpinclude/scripts/test.php]
В результате, страница грузится, но контент на странице обрывается. Могу ссылку скинуть посмотреть, поможете исправить?
Дмитрий, здравствуйте.
1. Попробуйте через php-теги так: <?include=test.php?>
2. Включите вывод ошибок в браузер. Без текста ошибок можно долго угадывать, в чём дело.
Это то, что надо! Спасибо, мужик. Отличный плагин использования PHP кода для WordPress. У меня Exec-PHP не заработал нормально. А Ваш отлично подошел.
Здравствуйте.
Дык, это же замечательно.
Отличное решение, include почему-то через плагины для php не обрабатывается, а здесь и работает и редактор кода есть на весь экран.
Ильдар, здравствуйте.
Это скорее вариант-ленивчик, ДСП (для собственного пользования). Иногда нужно добавить небольшой скрипт, а юзать что-то громоздкое, пусть и в десятки раз более функциональное, не хочется.
Рад, если оказалось полезно кому-то ещё.
Привет всем из солнечного Еревана !
Спасибо Анди, давно искал такой плагин, и случайно нашел у тебя!
Айк, доброго вечера!
Круто если пригодится. Делалось для себя, но запилил настройки и выложил для всех. Надеюсь, не только у меня работает.
Классная фотография. Просто нереальная красотища. Захотелось посмотреть вживую
Доброго дня!
Плагин класный, но у меня с ним улетает меню http://botanhost.ru/zakaz-xostinga/. Тема Phlox, страница сделана в Elementor. Подскажите куда копать. Уж больно нужен этот плагин. Буду вставлять php код зашифрованный zendом. Благодарю за помощь.
Здравствуйте.
Спасибо (:
Это похоже на работу функции phpinfo(), так? Данная функция формирует полноценную html-страницу, начиная с доктайпа. Можно исхитриться и перехватить вывод, отрезав ненужное:
<?php
ob_start();
phpinfo();
$buf = ob_get_contents();
ob_end_clean();
echo preg_replace('!^.+<body>(.+)</body.+$!s', '$1', $buf);
Но придётся самому добавить стили если хочется раскрашенную таблицу.
Альтернативные варианты — выводить в фрейме, либо вообще на отдельной странице.