Не срабатывает вывод шорткода в heredoc
-
не срабатывает вывод шорткода, возможно перемудрил с синтаксисом
пример кода — https://wtools.io/php-sandbox/b4JU
-
не срабатывает вывод шорткода
В чем выражается «не срабатывает»? Где и как вставляете/выводите?
просто пустое место, ошибок нет. Не выводиться именно внутренний шорткод (внутри всплывающего блока по кнопке).
<p> <?php echo do_shortcode("[event_form]"); ?> </p>
Выводится пустое всплывающее окно вместо формы. Если делать через
return '
— то выводиться, но приходится экранировать одинарные кавычки в javascrip’eХотел бы через heredoc. Мне кажется что он лучше подходить для вывода html со скриптами и стилями
вот код — https://wtools.io/php-sandbox/b4JU
Понятно. php внутри херадока не работает. Делаем так:
$event_form = do_shortcode("[event_form]"); return <<<BTNJQ <button id="openformeven" class="btn_open">ОТКРЫТЬ</button> <div id="cls_ctnr"> <div id="cls_pop"> <span class="cls_close" onclick="document.getElementById('cls_ctnr').style.display='none'; return false;">×</span> <h4>Добавим событие?</h4> <p>$event_form</p> </div> </div> BTNJQ;
- Ответ изменён 3 года, 7 месяцев назад пользователем Юрій.
По мойму это уже третий топик ТС, про не работающий шорткод внутри поп-апа….
Юрий (@yube), изящное решение. Знаю про пинги, но хочу вам выразить благодарность. И просьба пояснить для моего общего развития: в данном случае что лучше использовать
<<<HEREDOC
илиreturn '
tuxfighter (@tuxfighter) везде разные проблемы, разные варианты кода, где-то есть виджеты которые выводят шорткоды через echo нормально, а где то только через heredoc… Я плохо понимаю нюансы.
Yui (@fierevere) — если вы почитаете — то это сообщение автору плагина с просьбой сделать функциональность не на странице, а в popup-окне.С помощью Юрия я подступился в JQuery и javascript и стал их использовать.
Так что может с вашей помощью и добьюсь работы формы в popup окне.что лучше использовать <<<HEREDOC или return ‘
Поскольку используется подстановка значения, то
'
не годится. Хотя можно и с'
, но с использованием конкатенации:return ' ... <p>' . do_shortcode("[event_form]") . '</p> ... ';
Теоретически строки с одинарной кавычкой и nowdoc (без подстановки значений переменных) обрабатываются быстрее, чем с двойной и heredoc (с подстановкой), но на общем фоне сайта на вордпрессе на это можно не обращать внимания. А там, где стоит этим заморачиваться, как правило, пишут отнюдь не на php.
Я плохо понимаю нюансы.
heredoc лучше читается в случае многострочных конструкций и строк, содержащих двойные кавычки.
В нем, как и в строке в двойных кавычках, обрабатываются переменные, но не функции. Для вставки значений, возвращаемых функциями, надо использовать либо промежуточную переменную, либо конкатенацию.Есть еще eval(), но я бы не советовал с ним связываться без особой нужды.
- Ответ изменён 3 года, 7 месяцев назад пользователем Юрій.
про eval мне точно пока не нужно.
Так я могу использовать return <<<‘BTNJQ’ ? (nowdoc)Nowdoc похож на heredoc, но внутри него не осуществляется никаких подстановок. Эта конструкция идеальна для внедрения PHP-кода или других больших блоков текста без необходимости его экранирования.
судя по этому — не могу.
heredoc …В нем, как и в строке в двойных кавычках, обрабатываются переменные, но не функции. Для вставки значений, возвращаемых функциями, надо использовать либо промежуточную переменную, либо конкатенацию.
конкатенация в heredoc не срабатывает
Кстати, еще один вариант реализации:
<?php add_shortcode ( "my_shortcode_btn_js_jquery", "my_shortcode_btn_js_jquery_func" ); function my_shortcode_btn_js_jquery_func () { $html = <<< BTNJQ <button id="openformeven" class="btn_open">ОТКРЫТЬ</button> <div id="cls_ctnr"> <div id="cls_pop"> <span class="cls_close" onclick="document.getElementById('cls_ctnr').style.display='none'; return false;">×</span> <h4>Добавим событие?</h4> <p>[event_form]</p> </div> </div> BTNJQ; return do_shortcode($html);
один вариант реализации:
всё закладывается в переменную… в чем преимущества? или это просто творческий подход к написанию кода? типа кому как нравится, шорткод напрямую указан
return do_shortcode($html);
…а зачем там do_shortcode? а не просто вывод переменнойконкатенация в heredoc не срабатывает
Срабатывает, если правильно делать.
$html = <<< HTML часть 1 HTML; $html .= do_shortcode('[event_form]'); $html .= <<< HTML часть 2 HTML; return $html;
а зачем там do_shortcode? а не просто вывод переменной
Для того, чтобы шорткод
[event_form]
, вставленный в html-фрагмент, заменился результатом обработки этого шорткода.Впрочем, обработка может произойти и после того, как шорткод my_shortcode_btn_js_jquery вернет свою замену. Тогда не нужно внутри его обрабатывать. Но может и не произойти. Тут много нюансов в последовательности наложения фильтров.
- Ответ изменён 3 года, 7 месяцев назад пользователем Юрій.
Срабатывает, если правильно делать.`
) для меня слишком сложный синтаксис
Но может и не произойти. Тут много нюансов в последовательности наложения фильтров.
по вашему мнению как лучше для меня (учитывая что внутри return ещё и стили прописаны)
как лучше для меня
Лучше так, как а)работает и б)понятнее.
- Тема «Не срабатывает вывод шорткода в heredoc» закрыта для новых ответов.