Содержание
Задача. По умолчанию в виджетах Wodpress не поддерживаются шорткоды. Чтобы добавить такую возможность можно использовать фильтры или сделать свой пользовательский виджет с поддержкой шорткодов.
Фильтры для включения работы шорткодов виджетах
Решение 1. Использование фильтров контента виджетов WP, вставить Код №1 в functions.php
:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* === Обработка шорткодов в виджетах === */ function qfurs_enable_shortcodes_in_widgets() { // Поддержка шорткодов в старых текстовых виджетах add_filter('widget_text', 'do_shortcode'); // Поддержка шорткодов в новых текстовых виджетах add_filter('widget_text_content', 'do_shortcode'); // Поддержка шорткодов в виджетах блока HTML add_filter('widget_text_widget', 'do_shortcode'); } add_action('widgets_init', 'qfurs_enable_shortcodes_in_widgets'); |
Пользовательский виджет с поддержкой шорткодов
Решение 2. Для кастомного виджета с поддержкой работы шорткодов создаем новый класс и регистрируем новый виджет. Вставить Код №2 в functions.php
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/* === Виджет шорткодов === */ class WP_Widget_Custom_Shortcode extends WP_Widget { function __construct() { parent::__construct( 'custom_shortcode_widget', // Base ID __('Custom Shortcode Widget', 'text_domain'), // Name array( 'description' => __( 'A Custom Widget that displays a shortcode', 'text_domain' ), ) // Args ); } public function widget( $args, $instance ) { echo $args['before_widget']; if ( ! empty( $instance['title'] ) ) { echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title']; } // Обработка шорткода echo do_shortcode( $instance['shortcode'] ); echo $args['after_widget']; } public function form( $instance ) { $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; $shortcode = ! empty( $instance['shortcode'] ) ? $instance['shortcode'] : ''; ?> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_attr_e( 'Title:', 'text_domain' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>"> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'shortcode' ) ); ?>"><?php esc_attr_e( 'Shortcode:', 'text_domain' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'shortcode' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'shortcode' ) ); ?>" type="text" value="<?php echo esc_attr( $shortcode ); ?>"> </p> <?php } public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; $instance['shortcode'] = ( ! empty( $new_instance['shortcode'] ) ) ? strip_tags( $new_instance['shortcode'] ) : ''; return $instance; } } // Ррегистрация виджета шорткодов function register_custom_shortcode_widget() { register_widget( 'WP_Widget_Custom_Shortcode' ); } add_action( 'widgets_init', 'register_custom_shortcode_widget' ); |
Класс WP_Widget_Custom_Shortcode
можно задать свой.