Поддержка Проблемы и решения Не срабатывает вывод шорткода в heredoc

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Модератор Yuri

    (@yube)

    не срабатывает вывод шорткода

    В чем выражается «не срабатывает»? Где и как вставляете/выводите?

    просто пустое место, ошибок нет. Не выводиться именно внутренний шорткод (внутри всплывающего блока по кнопке).
    <p> <?php echo do_shortcode("[event_form]"); ?> </p>

    Выводится пустое всплывающее окно вместо формы. Если делать через return ' — то выводиться, но приходится экранировать одинарные кавычки в javascrip’e

    Хотел бы через heredoc. Мне кажется что он лучше подходить для вывода html со скриптами и стилями

    вот код — https://wtools.io/php-sandbox/b4JU

    Модератор Yuri

    (@yube)

    Понятно. 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;
    
    • Ответ изменён 2 года, 12 месяцев назад пользователем Yuri.

    По мойму это уже третий топик ТС, про не работающий шорткод внутри поп-апа….

    Модератор Yui

    (@fierevere)

    永子

    Юрий (@yube), изящное решение. Знаю про пинги, но хочу вам выразить благодарность. И просьба пояснить для моего общего развития: в данном случае что лучше использовать <<<HEREDOC или return '

    tuxfighter (@tuxfighter) везде разные проблемы, разные варианты кода, где-то есть виджеты которые выводят шорткоды через echo нормально, а где то только через heredoc… Я плохо понимаю нюансы.
    Yui (@fierevere) — если вы почитаете — то это сообщение автору плагина с просьбой сделать функциональность не на странице, а в popup-окне.

    С помощью Юрия я подступился в JQuery и javascript и стал их использовать.
    Так что может с вашей помощью и добьюсь работы формы в popup окне.

    Модератор Yuri

    (@yube)

    что лучше использовать <<<HEREDOC или return ‘

    Поскольку используется подстановка значения, то ' не годится. Хотя можно и с ', но с использованием конкатенации:

    return '
    ...
    <p>' . do_shortcode("[event_form]") . '</p>
    ...
    ';

    Теоретически строки с одинарной кавычкой и nowdoc (без подстановки значений переменных) обрабатываются быстрее, чем с двойной и heredoc (с подстановкой), но на общем фоне сайта на вордпрессе на это можно не обращать внимания. А там, где стоит этим заморачиваться, как правило, пишут отнюдь не на php.

    Модератор Yuri

    (@yube)

    Я плохо понимаю нюансы.

    heredoc лучше читается в случае многострочных конструкций и строк, содержащих двойные кавычки.
    В нем, как и в строке в двойных кавычках, обрабатываются переменные, но не функции. Для вставки значений, возвращаемых функциями, надо использовать либо промежуточную переменную, либо конкатенацию.

    Есть еще eval(), но я бы не советовал с ним связываться без особой нужды.

    • Ответ изменён 2 года, 12 месяцев назад пользователем Yuri.

    про eval мне точно пока не нужно.
    Так я могу использовать return <<<‘BTNJQ’ ? (nowdoc)

    Nowdoc похож на heredoc, но внутри него не осуществляется никаких подстановок. Эта конструкция идеальна для внедрения PHP-кода или других больших блоков текста без необходимости его экранирования.

    судя по этому — не могу.

    heredoc …В нем, как и в строке в двойных кавычках, обрабатываются переменные, но не функции. Для вставки значений, возвращаемых функциями, надо использовать либо промежуточную переменную, либо конкатенацию.

    конкатенация в heredoc не срабатывает

    Модератор Yuri

    (@yube)

    Кстати, еще один вариант реализации:

    <?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);
    
    • Ответ изменён 2 года, 12 месяцев назад пользователем Yuri.
    • Ответ изменён 2 года, 12 месяцев назад пользователем Yuri.

    один вариант реализации:

    всё закладывается в переменную… в чем преимущества? или это просто творческий подход к написанию кода? типа кому как нравится, шорткод напрямую указан
    return do_shortcode($html); …а зачем там do_shortcode? а не просто вывод переменной

    Модератор Yuri

    (@yube)

    конкатенация в heredoc не срабатывает

    Срабатывает, если правильно делать.

    $html = <<< HTML
     часть 1
    HTML;
    $html .= do_shortcode('[event_form]');
    $html .= <<< HTML
     часть 2
    HTML;
    return $html;
    
    Модератор Yuri

    (@yube)

    а зачем там do_shortcode? а не просто вывод переменной

    Для того, чтобы шорткод [event_form], вставленный в html-фрагмент, заменился результатом обработки этого шорткода.

    Впрочем, обработка может произойти и после того, как шорткод my_shortcode_btn_js_jquery вернет свою замену. Тогда не нужно внутри его обрабатывать. Но может и не произойти. Тут много нюансов в последовательности наложения фильтров.

    • Ответ изменён 2 года, 12 месяцев назад пользователем Yuri.

    Срабатывает, если правильно делать.`

    ) для меня слишком сложный синтаксис

    Но может и не произойти. Тут много нюансов в последовательности наложения фильтров.

    по вашему мнению как лучше для меня (учитывая что внутри return ещё и стили прописаны)

    Модератор Yuri

    (@yube)

    как лучше для меня

    Лучше так, как а)работает и б)понятнее.

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Тема «Не срабатывает вывод шорткода в heredoc» закрыта для новых ответов.