Как создать шорткод для виджета в 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 для генерации шорткода для любых виджетов. Вы можете прочитать больше об этом здесь.
Дайте мне знать, как это происходит.