Как создать шорткод для виджета в WordPress?

Я хочу создать шорткод для моего виджета.

Это мой код для создания виджета, если я хочу создать шорткод для этого виджета, что мне делать?

<pre>
function my_slider_post() {
    register_widget('my_slider_post');
    }
    add_action('widgets_init','my_slider_post');




class my_slider_post extends WP_Widget {
    function my_slider_post() {

        $widget_ops = array('classname' => 'my_slider_post','description' => __('Widget display Slider Post','theme'));
         add_action('admin_enqueue_scripts', array($this, 'scripts'));
        parent::__construct('mysliderpost',__('my Slider Post','theme'),$widget_ops);

        }

    function widget( $args, $instance ) {
        extract( $args );
        /* User-selected settings. */
    $title = apply_filters('widget_title', $instance['title'] );
    $img1 = $instance['image_one'];
    $title1 = $instance['title_one'];
    $desc1 = $instance['desc_one'];
    $img2 = $instance['image_two'];
    $img3 = $instance['image_three'];

        /* Before widget (defined by themes). */
        echo $before_widget;

        /* Title of widget (before and after defined by themes). */
        if ( $title )
            echo $before_title . $title . $after_title;



<!-- start -->

// code html to show





        /* After widget (defined by themes). */
        echo $after_widget;

    }

    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;

        /* Strip tags (if needed) and update the widget settings. */
            $instance['title'] = strip_tags( $new_instance['title'] );
            $instance['image_one'] = $new_instance['image_one'];
            $instance['title_one'] = $new_instance['title_one'];
            $instance['desc_one'] = $new_instance['desc_one'];
            $instance['image_two'] = $new_instance['image_two'];
            $instance['image_three'] = $new_instance['image_three'];

        return $instance;
    }
    public function scripts()
    {
       wp_enqueue_script( 'media-upload' );
       wp_enqueue_media();
       wp_enqueue_script('our_admin', get_template_directory_uri() . '/js/our_admin.js', array('jquery'));
    }
    public function form( $instance ) {
    // code html to show on widget into sidebar control panel 

     }



    }



</pre>

2 ответа

Для вашего класса виджета my_slider_post вы можете использовать этот код:

      <?php add_shortcode( 'show_slider', 'slider_shortcode' );
function slider_shortcode( $atts ) {
    // Configure defaults and extract the attributes into variables
    extract( shortcode_atts(
        array( 
            'type'   => 'my_slider_post '
            //you can add here more parameters below
        ),
        $atts
    ));

    $args = array( //optional markup:
        'before_widget' => '<div class="box widget scheme-' . $scheme . ' ">',
        'after_widget'  => '</div>',
        'before_title'  => '<div class="widget-title">',
        'after_title'   => '</div>',
    );

    ob_start();
    the_widget( $type, $atts, $args );
    $output = ob_get_clean();
    return $output;
}

а затем используйте этот код

      [show_slider]

для запуска виджета.

Я использовал эту статью: https://www.smashingmagazine.com/2012/12/inserting-widgets-with-shortcodes/

Добавлять

add_shortcode('the_slider_short_code', 'my_slider_post'); после class my_slider_post extends WP_Widget и вызвать шорткод как [the_slider_short_code] в вашем сообщении, странице или пользовательском типе сообщения.

В качестве альтернативы вы можете использовать плагин шорткода amr для генерации шорткода для любых виджетов. Вы можете прочитать больше об этом здесь.

Дайте мне знать, как это происходит.

Другие вопросы по тегам