За последние 24 часа нас посетили 22855 программистов и 1243 робота. Сейчас ищут 763 программиста ...

Как правильно создавать шорткоды - echo, return, EOT...?

Тема в разделе "Wordpress", создана пользователем jurvrn.ru, 20 июл 2019.

  1. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    Что правильнее при создании шоркодов использовать echo ' / return ' / <<<EOT / <<<HTML.....?
    Шоркоды, например, для придания стиля того что внутри них или вывод кнопки, формы или произвольного кода html через текстовый виджет.
     
  2. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Правильнее рендерить через шаблонизатор.

    Или:
    PHP:
    1. <?php
    2. ...
    3. ?>
    4. <div>
    5. <?php
    6. ...
    7. ?>
     
  3. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @ElisDN что такое это шаблонизатор? плагин?
    я так и делаю через создание функции php
     
  4. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    https://www.php.net/manual/ru/control-structures.alternative-syntax.php
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    типа иметь папку с фрагментами html-кода, в который вставлено минимум php, то есть только простейшие циклы, условия, вывод переменных. И по шорткоду делать include этих фрагментов.
    Можно еще юзать ob_start() / ob_get_clean() чтобы делать return готового html.
     
    jurvrn.ru нравится это.
  6. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    ты еще и функцию создал чтобы обрабатывать echo ?
    юзай выше ссылку скинул
    Как пример как юзаю я если с нуля делаю
    <?
    $var =10;
    if($var == 10):
    ?><div>У меня <?= $var ?> яблок</div>
    <? endif; ?>
    --- Добавлено ---
    при шорт кодах echo не юзается, короткая форма <?= ?>
    return это не echo и его назначение вовсе другое, echo выводит инфу return это для функций , выдает результат 1 и завершает работу функции
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    как раз юзаются, ели мы говорим в контексте Wordpress, вот пример из документации
    Код (Text):
    1. function caption_shortcode( $atts, $content = null ) {
    2.     return '<span class="caption">' . $content . '</span>';
    3. }
    4. add_shortcode( 'caption', 'caption_shortcode' );
    https://codex.wordpress.org/Shortcode_API
     
    jurvrn.ru нравится это.
  8. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я походу не правильно понял тему ))
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
  10. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я с телефона был, не заметил
     
  11. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @Неугомонный, [USER] @[vs] [/USER] можно приведу весь свой плагин? Я его смог заставить работать только так - через echo <<<. Возможно есть более правильный путь? Подскажите, как ob_start () использовать....
    Код (Text):
    1. <?php
    2.  
    3. add_action('widgets_init', 'my_widget_func_new_item');
    4.  
    5. function my_widget_func_new_item() {
    6.     register_widget('my_widget_new_item');
    7. }
    8.  
    9. class my_widget_new_item extends WP_Widget
    10. {
    11.     function __construct()
    12.     {
    13.         parent::__construct(
    14.             'my-widget-new-item-tabs',
    15.             'Виджет "Добавить на сайт запись"',
    16.             array('description' => 'Добавить на сайт новую запись, новость, отзыв...',)
    17.         );
    18.     }
    19.  
    20.     /**
    21.      * Вывод виджета
    22.      * @param array $args
    23.      * @param array $instance
    24.      */
    25.     public function widget($args, $instance) {
    26.         $title = apply_filters('widget_title', $instance['title']);
    27.         echo $args['before_widget'];
    28.         if (!empty($title))
    29.             echo $args['before_title'] . $title . $args['after_title'];
    30.  
    31. // здесь к выводим форму
    32. echo <<<HTML
    33. <style>
    34. #padd {
    35.     weight: 0 auto;
    36.     padding: 10px;
    37.     background-color: #fff;
    38. }
    39.    .tab input, .tab-content { display: none; }
    40.    .tab {
    41.     font: 0.8rem/1.2 Arial, sans-serif; /* Параметры шрифта */
    42.     border: 1px solid #e9eaec; /* Параметры рамки */
    43.     border-radius: 3px; /* Скругляем уголки */
    44.     color: #848994; /* Цвет текста */
    45.     margin-bottom: 10px; /* Расстояние между пунктами */
    46.    }
    47.    .tab-title {
    48.     padding: 10px; /* Поля вокруг текста */
    49.     display: block; /* Блочный элемент */
    50.     text-transform: uppercase; /* Все буквы заглавные */
    51.     font-weight: bold; /* Жирное начертание */
    52.     cursor: pointer; /* Вид курсора */
    53.    }
    54.    .tab-title::after {
    55.     content: \'+\'; /* Выводим плюс */
    56.     float: right; /* Размещаем по правому краю */
    57.    }
    58.    .tab-content {
    59.     padding: 10px 20px; /* Поля вокруг текста */
    60.    }
    61.    .tab :checked + .tab-title {
    62.     background-color: #50a2de; /* Цвет фона */
    63.     border-radius: 3px 3px 0 0; /* Скругляем уголки */
    64.     color: #fff; /* Цвет текста */
    65.    }
    66.    .tab :checked + .tab-title::after {
    67.     content: \'−\'; /* Выводим минус */
    68.    }
    69.    .tab :checked ~ .tab-content {
    70.     display: block; /* Показываем содержимое */
    71.    }
    72.   </style>
    73.  
    74. <div id="padd">
    75.   <div class="accordion">
    76.    <div class="tab">
    77.     <input type="checkbox" id="tab1" name="tab-group">
    78.     <label for="tab1" class="tab-title">Что такое HTML5?</label>
    79.     <section class="tab-content">
    80.      <p>Под HTML5 обычно подразумевают два разных понятия:</p>
    81.      <ul>
    82.       <li>Это язык разметки документа, пришедший на смену HTML4 и XHTML.</li>
    83.       <li>Это набор веб-технологий, позволяющий делать на сайте
    84.        всякие интересные штуки.</li>
    85.      </ul>
    86.     </section>
    87.  
    88.    </div>
    89.    <div class="tab">
    90.     <input type="checkbox" id="tab2" name="tab-group">
    91.     <label for="tab2" class="tab-title">Можно ли программировать на HTML5?</label>
    92.     <section class="tab-content">
    93.      Нет, на HTML5 по прежнему нельзя программировать, основным языком является JavaScript.
    94.      Так что в разговоре лучше не упоминать, что умеешь программировать на HTML5, засмеют.
    95.     </section>
    96.    </div>
    97.    <div class="tab">
    98.     <input type="checkbox" id="tab3" name="tab-group">
    99.     <label for="tab3" class="tab-title">Чем HTML5 отличается от HTML4?</label>
    100.     <section class="tab-content">
    101.      В HTML5 добавлены новые элементы, вроде &lt;header&gt;, &lt;footer&gt;,
    102.      &lt;aside&gt;, &lt;article&gt;, появилась долгожданная поддержка аудио,
    103.      видео и многое другое.
    104.     </section>
    105.    </div>
    106.   </div>
    107. </div>
    108. HTML;
    109.  
    110.     echo $args['after_widget'];
    111. }
    112. /* конец формы и функции*/
    113.  
    114.  
    115. /**
    116. * Настройка виджета. В данном случае заголовок.
    117. * @param array $instance
    118. * @return string|void
    119. */
    120.     public function form($instance)
    121.     {
    122.         if (isset($instance['title'])) {
    123.             $title = $instance['title'];
    124.         } else {
    125.             $title = 'Добавить запись на сайт';
    126.         }
    127.         ?>
    128.         <p>
    129.             <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
    130.             <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>"
    131.                    name="<?php echo $this->get_field_name('title'); ?>" type="text"
    132.                    value="<?php echo esc_attr($title); ?>"/>
    133.         </p>
    134.         <?php
    135.     }
    136.  
    137.  
    138.     public function update($new_instance, $old_instance)
    139.     {
    140.         $instance = array();
    141.         $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
    142.         return $instance;
    143.     }
    144. }
    145.  
    146. ?>
     
  12. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    Просто интересно, в вашем примере стиль будет применен к чему? Ко всем span ?
    --- Добавлено ---
    @[vs],в вашем примере стиль будет применен ко всем span ?