Что правильнее при создании шоркодов использовать echo ' / return ' / <<<EOT / <<<HTML.....? Шоркоды, например, для придания стиля того что внутри них или вывод кнопки, формы или произвольного кода html через текстовый виджет.
типа иметь папку с фрагментами html-кода, в который вставлено минимум php, то есть только простейшие циклы, условия, вывод переменных. И по шорткоду делать include этих фрагментов. Можно еще юзать ob_start() / ob_get_clean() чтобы делать return готового html.
ты еще и функцию создал чтобы обрабатывать echo ? юзай выше ссылку скинул Как пример как юзаю я если с нуля делаю <? $var =10; if($var == 10): ?><div>У меня <?= $var ?> яблок</div> <? endif; ?> --- Добавлено --- при шорт кодах echo не юзается, короткая форма <?= ?> return это не echo и его назначение вовсе другое, echo выводит инфу return это для функций , выдает результат 1 и завершает работу функции
как раз юзаются, ели мы говорим в контексте Wordpress, вот пример из документации Код (Text): function caption_shortcode( $atts, $content = null ) { return '<span class="caption">' . $content . '</span>'; } add_shortcode( 'caption', 'caption_shortcode' ); https://codex.wordpress.org/Shortcode_API
@Неугомонный, [USER] @[vs] [/USER] можно приведу весь свой плагин? Я его смог заставить работать только так - через echo <<<. Возможно есть более правильный путь? Подскажите, как ob_start () использовать.... Код (Text): <?php add_action('widgets_init', 'my_widget_func_new_item'); function my_widget_func_new_item() { register_widget('my_widget_new_item'); } class my_widget_new_item extends WP_Widget { function __construct() { parent::__construct( 'my-widget-new-item-tabs', 'Виджет "Добавить на сайт запись"', array('description' => 'Добавить на сайт новую запись, новость, отзыв...',) ); } /** * Вывод виджета * @param array $args * @param array $instance */ public function widget($args, $instance) { $title = apply_filters('widget_title', $instance['title']); echo $args['before_widget']; if (!empty($title)) echo $args['before_title'] . $title . $args['after_title']; // здесь к выводим форму echo <<<HTML <style> #padd { weight: 0 auto; padding: 10px; background-color: #fff; } .tab input, .tab-content { display: none; } .tab { font: 0.8rem/1.2 Arial, sans-serif; /* Параметры шрифта */ border: 1px solid #e9eaec; /* Параметры рамки */ border-radius: 3px; /* Скругляем уголки */ color: #848994; /* Цвет текста */ margin-bottom: 10px; /* Расстояние между пунктами */ } .tab-title { padding: 10px; /* Поля вокруг текста */ display: block; /* Блочный элемент */ text-transform: uppercase; /* Все буквы заглавные */ font-weight: bold; /* Жирное начертание */ cursor: pointer; /* Вид курсора */ } .tab-title::after { content: \'+\'; /* Выводим плюс */ float: right; /* Размещаем по правому краю */ } .tab-content { padding: 10px 20px; /* Поля вокруг текста */ } .tab :checked + .tab-title { background-color: #50a2de; /* Цвет фона */ border-radius: 3px 3px 0 0; /* Скругляем уголки */ color: #fff; /* Цвет текста */ } .tab :checked + .tab-title::after { content: \'−\'; /* Выводим минус */ } .tab :checked ~ .tab-content { display: block; /* Показываем содержимое */ } </style> <div id="padd"> <div class="accordion"> <div class="tab"> <input type="checkbox" id="tab1" name="tab-group"> <label for="tab1" class="tab-title">Что такое HTML5?</label> <section class="tab-content"> <p>Под HTML5 обычно подразумевают два разных понятия:</p> <ul> <li>Это язык разметки документа, пришедший на смену HTML4 и XHTML.</li> <li>Это набор веб-технологий, позволяющий делать на сайте всякие интересные штуки.</li> </ul> </section> </div> <div class="tab"> <input type="checkbox" id="tab2" name="tab-group"> <label for="tab2" class="tab-title">Можно ли программировать на HTML5?</label> <section class="tab-content"> Нет, на HTML5 по прежнему нельзя программировать, основным языком является JavaScript. Так что в разговоре лучше не упоминать, что умеешь программировать на HTML5, засмеют. </section> </div> <div class="tab"> <input type="checkbox" id="tab3" name="tab-group"> <label for="tab3" class="tab-title">Чем HTML5 отличается от HTML4?</label> <section class="tab-content"> В HTML5 добавлены новые элементы, вроде <header>, <footer>, <aside>, <article>, появилась долгожданная поддержка аудио, видео и многое другое. </section> </div> </div> </div> HTML; echo $args['after_widget']; } /* конец формы и функции*/ /** * Настройка виджета. В данном случае заголовок. * @param array $instance * @return string|void */ public function form($instance) { if (isset($instance['title'])) { $title = $instance['title']; } else { $title = 'Добавить запись на сайт'; } ?> <p> <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>"/> </p> <?php } public function update($new_instance, $old_instance) { $instance = array(); $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : ''; return $instance; } } ?>
Просто интересно, в вашем примере стиль будет применен к чему? Ко всем span ? --- Добавлено --- @[vs],в вашем примере стиль будет применен ко всем span ?