Как добавить код php из своего плагина WordPress на страницу сайта?
Разрабатываю сайт для компании. На сайте должна быть страница, на которой будут динамически отображаться карточки "товаров". Как через плагин для вёрстки страниц ELementor добавить код на PHP на страницу? Вроде можно через шорткод, но как это сделать не могу разобраться. Везде инфа как добавить шорткод для функции в файле темы functions.php, а мне надо добавить код из своего плагина разработанного мной и подключённого к консоли Wordpress.
Дополнительно:
https://codex.wordpress.org/%D0%9D%D0%B0%D0%BF%D0%...
https://codex.wordpress.org/Shortcode_API
а мне надо добавить код из своего плагина разработанного мной
Если плагин свой, то это сильно упрощает. Вы легко можете добавить в Ваш плагин разработанный Вами
add_shortcode('my_shortcode', function() { // обработчик шорткода }); |
add_shortcode('my_shortcode', function() { // обработчик шорткода });
и вставить [my_shortcode] через Элементор.
- После добавления строки add_shortcode сайт ломается, хотя я даже в Элементоре не успел вызвать этот шорт код. В чём может быть проблема? И что здесь означает обработчик шорткода? Я думал вставляется только команда для создания шорткода и всё.
-
После добавления строки add_shortcode сайт ломается,
Проверьте синтаксис. И куда Вы добавляете "строку"? (не, можно, конечно, и в одну строку всё написать, но зачем?)
И что здесь означает обработчик шорткода?
Что в том месте, где я поставил комментарий, должен быть реальный обработчик шорткода, который я по очевидным причинам написать не могу.
Я думал вставляется только команда для создания шорткода и всё.
А чем должен заменяться шорткод движок должен сам угадать или как?
- YBB, я добавляю объявление шорткода в код плагина вне какой-либо функции.
Просто я думал, что нужно создать свою функцию на php, а потом при объявлении шорткода указать, какая функция будет выполняться там, где этот шорткод на сайте вызывается -
Просто я думал, что нужно создать свою функцию на php, а потом при объявлении шорткода указать, какая функция будет выполняться
Ну так именно это я и написал в коде, просто использовал анонимную функцию (https://www.php.net/manual/ru/functions.anonymous.php). Анонимная функция гарантировано ни с кем не будет конфликтовать за имя.
С именованной было бы так:add_shortcode('my_shortcode', 'my_shortcode_handler'); function my_shortcode_handler() { // обработчик шорткода }
add_shortcode('my_shortcode', 'my_shortcode_handler'); function my_shortcode_handler() { // обработчик шорткода }
...только в профиль :)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

В Elementor нельзя просто вставить PHP-код в текстовый блок и ожидать, что он выполнится. Правильный способ для своего плагина — зарегистрировать шорткод, а в Elementor вставить этот шорткод через виджет Shortcode. Тогда PHP остаётся в плагине, а на странице выводится только безопасная команда вида
[my_products].Минимальный пример в вашем плагине:
add_shortcode('my_products', function ($atts) { $atts = shortcode_atts([ 'limit' => 12, ], $atts); $query = new WP_Query([ 'post_type' => 'product', 'posts_per_page' => (int) $atts['limit'], ]); ob_start(); if ($query->have_posts()) { echo '<div class="my-products">'; while ($query->have_posts()) { $query->the_post(); echo '<article class="my-product-card">'; echo '<h3>' . esc_html(get_the_title()) . '</h3>'; echo '</article>'; } echo '</div>'; } wp_reset_postdata(); return ob_get_clean(); });
После этого в Elementor добавляете виджет Shortcode и пишете:
[my_products limit="8"]
Если карточки должны быть сложными, лучше вынести HTML в отдельный template-файл внутри плагина и подключать его через
includeвнутри буфераob_start(). Так код будет поддерживаемым.Не используйте плагины, которые разрешают выполнять произвольный PHP из редактора страницы, если это не крайняя необходимость. Это риск безопасности: любой пользователь с доступом к редактору может выполнить серверный код. Шорткод из своего плагина безопаснее, потому что вы контролируете параметры и вывод.