Intereting Posts
Laravel 5.3 – htmlspecialchars () ожидает, что параметр 1 будет строкой Jquery принимает последний результат как значение PHP-JSON: проверьте неработающие ссылки Вставка изображения несколько раз в зависимости от разницы между двумя номерами. PHP Как устранить неполадку пакета при попытке заставить композитора получить последние версии пакетов? ИСПОЛЬЗОВАНИЕ webservice в PHP, который возвращает XML Может mysql_real_escape_string ALONE предотвратить все виды SQL-инъекций? как отправлять значения из PHP в jQuery: echo или return? SimpleXml как правильно установить кодировку и xmins? Zend \ ServiceManager \ ServiceManager :: get не удалось получить или создать экземпляр для getAlbumTable создать экземпляр класса из переменной в PHP? Добавление пользовательского пункта меню в меню WordPress Laravel 5.2 – Auth: отображать собственные сообщения об ошибках Почему PHP считает, что 0 равно строке? В чем разница между | и || или операторов?

Примеры обновления виджета WordPress для элементов, требующих тегов

Недавно я понял, что я недостаточно использую виджеты в WordPress при разработке боковых панелей в темах, поэтому последние пару дней я провел исследование, как правильно их разрабатывать. Просмотрев много руководств, я обнаружил, что некоторые из них на виджетах настраиваемого здания устарели. Я видел, где я должен использовать конструкцию:

function __construct() { parent::__construct( // Base ID of your widget 'foobar_widget', // Widget name will appear in UI __('Give them foo Widget', 'foobar_widget_domain'), // Widget description array( 'description' => __( 'Development widget for testing', 'foobar_widget_domain' ), ) ); } 

Кодекс очень минимален, когда речь идет о пользовательских виджетах. После просмотра тегов SO Word wordpress-widget и виджета я не видел решения при вызове обновления для виджета, если текстовая область нуждается в тегах. Большое количество людей вызывают вызов экземпляра title как:

 $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; 

В моей form() функции form() мне нужна текстовая область, которая будет принимать код ввода пользователя, например, скопированное объявление Google Adsense. Следующие работы, но я не уверен, если есть лучший подход к принятию ввода из формы:

 // Updating widget replacing old instances with new public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; $instance['foo1'] = $new_instance['foo1']; return $instance; } } 

Есть ли лучший способ вернуть $instance когда вам нужны теги, не используя strip_tags() PHP?

Я использую следующий замечательный фрагмент кода для регистрации пользовательского виджета, который принимает любой HTML-код

 add_action('widgets_init', create_function('', 'register_widget("clean_markup_widget");')); class Clean_Markup_Widget extends WP_Widget { function __construct() { parent::WP_Widget('clean_markup_widget', 'ASR Custom Text Widget', array('description'=>'Simple widget for well-formatted markup &amp; text')); } function widget($args, $instance) { extract($args); $markup = $instance['markup']; //echo $before_widget; if ($markup) echo $markup; //echo $after_widget; } function update($new_instance, $old_instance) { $instance = $old_instance; $instance['markup'] = $new_instance['markup']; return $instance; } function form($instance) { if ($instance) $markup = esc_attr($instance['markup']); else $markup = __('&lt;p&gt;Clean, well-formatted markup.&lt;/p&gt;', 'markup_widget'); ?> <p> <label for="<?php echo $this->get_field_id('markup'); ?>"><?php _e('Markup/text'); ?></label><br /> <textarea class="widefat" id="<?php echo $this->get_field_id('markup'); ?>" name="<?php echo $this->get_field_name('markup'); ?>" type="text" rows="16" cols="20" value="<?php echo $markup; ?>"><?php echo $markup; ?></textarea> </p> <?php } } 

Есть ли лучший способ вернуть $instance когда вам нужны теги, не используя strip_tags() PHP?

Да! WordPress имеет множество способов проверки и дезинфекции пользовательских данных.

Для вашего случая wp_kses_post() должен работать очень хорошо.

Это описание: Sanitize content для разрешенных тегов HTML для сообщения.

Он использует список разрешенных тегов по умолчанию, который вы можете найти в wp-includes/kses.php .

Если вы хотите разрешить только определенные теги, самый безопасный способ сделать это – использовать wp_kses() вместо wp_kses_post() .

Разница заключается в том, что wp_kses() требует второго параметра для $allowed_html вместо использования глобальной переменной $allowedposttags .

Есть способы фильтровать или переопределять глобальную переменную $allowedposttags но, вероятно, это не самая лучшая идея в этом случае, так как они будут влиять на другой HTML, например, содержимое сообщения, в дополнение к вашему виджету.

Функция обновления с помощью wp_kses_post() будет выглядеть так:

 // Updating widget replacing old instances with new public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; $instance['foo1'] = wp_kses_post( $new_instance['foo1'] ); return $instance; }