it-roy-ru.com

Шорткоды, буферизация вывода и функции WordPress

У меня есть пара длинных форм, которые я хочу выводить как шорткоды. Shortcode API указывает на то, что

Если шорткод производит много HTML, ob_start может использоваться для захвата вывода и преобразования его в строку

Кажется, это точно мой случай. Также я хочу использовать функции WordPress внутри моего HTML, например так:

function my_shortcode_register_form( $atts, $content = null ) {

    ob_start();
    ?>
    <div id="reg_form">
        <h2><?php echo __('Login info', 'my-plugin-domain'); ?></h2>
        <!-- and so on -->

    </div>
    <p><a href="<?php echo site_url( 'dashboard' ); ?>"><?php echo __('Go to Dashboard', 'my-plugin-domain'); ?></a>!</p>
    <?php
    $output_string = ob_get_contents();
    ob_end_clean();

    return $output_string;
}

add_shortcode('register_form', array( $this, 'my_shortcode_register_form' ));

Это отлично работает, но меня интересуют лучшие практики, потенциальные ошибки, а также производительность. Есть ли недостатки этого подхода? Что-нибудь, что могло пойти ужасно неправильно?

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

3
montrealist

Должен ли я просто перенести эти формы в шаблоны вместо этого?

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

Я мог бы:

  1. Предпочитайте выделенный шаблон шорткоду, особенно для длинных форм. Вы начинаете сталкиваться с необходимостью обрабатывать данные $_POST или $_GET в шорткоде или проверять наличие этих данных в заголовке или другом подобном, и это становится беспорядочным. Плюс шорткод - это накладные расходы, которых можно избежать.
  2. Рассмотрим исключение из правила № 1 и создайте короткий код, если форму необходимо повторно использовать на нескольких страницах или если такое повторное использование является, по крайней мере, вероятной возможностью. Честно говоря, если он не проходит тест "повторного использования", я вообще не вижу смысла в шорткоде.
  3. Рассмотрим исключение из правил № 1 и № 2, если вам нужен редактируемый контент вокруг шорткода.
  4. Если вы пишете плагин, шорткод - один из ваших лучших вариантов. Вы можете поручить людям создать шаблон страницы и вставить некоторый код, или изменить правила перезаписи, чтобы создать свою собственную псевдостраницу, но первое является отталкивающим для большинства пользователей, а второе - сложным. Даже просьба людей вставить шорткод в текст сообщения может вызвать панику, но в какой-то момент человечество должно научиться пользоваться компьютерами.

Я уверен, что есть и другие проблемы, но это те, которые выделяются для меня.

3
s_ha_dum