
В этой статье я расскажу как сделать виджет для WordPress. Наш виджет будет простым — он будет показывать последних зарегистрировавшихся пользователей.
Для начала нужно создать в папке с вашей темой папку widgets, то есть у Вас должен получится такой путь /wp-content/themes/your-theme-name/widgets. Дальше создаем файл виджета в папке widgets, назовем его Widget_LastReg.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
<?php class Widget_LastReg extends WP_Widget { function __construct() { // указываем в конструкторе общие настройки которые будут видны в админке // название и описание виджета $widget_ops = array ( 'classname' => 'sidebar-box' , 'description' => __( "Последние пользователи которые зарегистрировались у вас на сайте" ) ); parent::__construct( 'last-reg' , 'Последние пользователи' , $widget_ops ); $this ->alt_option_name = 'widget_last_reg' ; // при сохранении поста или удалении поста, а так же при смене темы // кеш виджета будет очищаться add_action( 'save_post' , array (& $this , 'flush_widget_cache' ) ); add_action( 'deleted_post' , array (& $this , 'flush_widget_cache' ) ); add_action( 'switch_theme' , array (& $this , 'flush_widget_cache' ) ); } // этот метод срабатывает непосредственно при выводе выджета на странице function widget( $args , $instance ) { // загружаем кеш, если есть кеш для данного виджета выводим его и выходим $cache = wp_cache_get( 'widget_last_reg' , 'widget' ); global $wpdb ; if ( ! is_array ( $cache ) ) $cache = array (); if ( ! isset( $args [ 'widget_id' ] ) ) $args [ 'widget_id' ] = $this ->id; if ( isset( $cache [ $args [ 'widget_id' ] ] ) ) { echo $cache [ $args [ 'widget_id' ] ]; return ; } ob_start(); extract( $args ); // получаем выводимое количество пользователей из настроек виджета // если там не указано то будут выводится 5 последних пользователей $limit = $instance [ 'number' ]? $instance [ 'number' ] : 5; // пишем запрос и получаем результат $users = $wpdb ->get_results("SELECT * FROM ORDER BY user_registered DESC LIMIT $limit "); // и выводим результат ?> <div id= "recent-users" class = "widget sidebar-box" > <h3><?php echo $instance [ 'title' ]? $instance [ 'title' ] : 'Новые пользователи' ?></h3> <ul class = "sidebar-menu arrows" > <?php foreach ( $users as $u ){ ?> <li> <?php echo $u ->user_nicename ?> </li> <?php } ?> </ul> </div> <?php // сохраняем кеш $cache [ $args [ 'widget_id' ]] = ob_get_flush(); wp_cache_set( 'widget_last_reg' , $cache , 'widget' ); } // этот метод срабатывает при сохранении настроек виджета function update( $new_instance , $old_instance ) { $instance = $old_instance ; $instance [ 'title' ] = strip_tags ( $new_instance [ 'title' ]); $instance [ 'number' ] = (int) $new_instance [ 'number' ]; // здесь мы удаляем кеш виджета для того чтобы // загрузить его в контексте новых настроек $this ->flush_widget_cache(); $alloptions = wp_cache_get( 'alloptions' , 'options' ); if ( isset( $alloptions [ 'widget_recent_entries' ]) ) delete_option( 'widget_recent_entries' ); return $instance ; } function flush_widget_cache() { wp_cache_delete( 'widget_last_reg' , 'widget' ); } function form( $instance ) { // этот метод вызывается когда мы заходим в настройки виджета в админке // здесь мы создаем два текстовых поля // одно для заголовка и второе для количества выводимых пользователей $title = isset( $instance [ 'title' ]) ? esc_attr( $instance [ 'title' ]) : '' ; $number = isset( $instance [ 'number' ]) ? absint( $instance [ 'number' ]) : 5;?> <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 $title; ?>" /> </p> <p> <label for = "<?php echo $this->get_field_id('number'); ?>" ><?php _e( 'Number of users to show:' ); ?></label> <input id= "<?php echo $this->get_field_id('number'); ?>" name= "<?php echo $this->get_field_name('number'); ?>" type= "text" value= "<?php echo $number; ?>" size= "3" /> </p> <?php } } |
Виджет готов. Но это еще не всё, если сейчас Вы зайдете в админку Вашего сайта, то этого виджета там не будет. Чтобы он появился и его можно было прикрепить на сайт Вам нужно в файле /wp-content/themes/your-theme-name/functions.php написать вот что:
1
2
3
4
5
6
7
|
<?php function instanceof_widgets_init() { require dirname( __FILE__ ) . '/widgets/Widget_LastReg.php' ; register_widget( 'Widget_LastReg' ); } add_action( 'widgets_init' , 'instanceof_widgets_init' ); ... |
Теперь при вызове функции widgets_init() WordPress вызовет нашу функцию instanceof_widgets_init() в которой мы зарегистрируем наш виджет Widget_LastReg. После этого мы можем прицепить наш, только что созданный виджет на страницу, таким же образом как стандартные виджеты.