Статьи

Популярный плагин блога для WordPress Multisite

WordPress стал одной из самых популярных блоговых платформ с открытым исходным кодом. Начиная с WordPress 3.0 WordPressMU также стал частью WordPress. Функция WordPress Multisite позволяет создавать сеть сайтов, которые запускаются из одной и той же установки WordPress. Таким образом, можно загрузить плагин или тему для установки, и она будет доступна для всех сайтов в этой сети WordPress.

В этой статье мы рассмотрим, как создать плагин «Избранные блоги», который создает виджет и шорткод для отображения Избранных блогов при установке WordPress Multisite.


Если у вас еще не установлена ​​WordPress Multisite, вы можете загрузить последнюю версию WordPress с WordPress.org . В этой статье перечислены шаги по созданию установки WordPress Multisite. Вы можете выполнить шаги, чтобы успешно установить экземпляр WordPress Multisite на свой сервер.


Теперь мы собираемся создать плагин для сети, который будет называться популярным блогом. В вашей папке wp-content / plugins создайте каталог с именем featuredblog . Внутри этого каталога создайте файл featuredblog.php со следующим содержимым:

1
2
3
4
5
6
7
8
9
/*
Plugin Name: Featured Blog
Plugin URI: http://wp.tutsplus.com/tutorials/plugins/a-featured-blog-plugin-for-wordpress-multisite/
Description: This plugin helps you display featured blogs on you multisite installation
Author: Abbas
Version: 0.1
Author URI: http://wp.tutsplus.com/author/AbbasSuterwala/
Network: true
*/

Это должно создать сетевой плагин для нас, так как используется Network: true и мы должны увидеть этот плагин в списке плагинов для сетевого администратора следующим образом. Теперь мы можем активировать этот плагин для всей сети от администратора сети.


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
function Featured_blog_posts_for_blog($blog_id,$numberofpost) {
 
    $output = ”;
    wp_reset_query();
    switch_to_blog($blog_id);
 
    global $post;
    $my_query = new WP_Query(‘order=DSC&posts_per_page=’.$numberofpost);
    while ($my_query->have_posts()) :
        $my_query->the_post();
        $output .='<li class=”post_link”><a href=”‘.get_permalink(). ‘” rel=”bookmark”>’.get_the_title().'</a> </li>’;
    endwhile;
 
    restore_current_blog();
 
    return $output;
}

В этой функции мы берем $blog_id и количество постов, которые мы хотим получить. В этой функции первое, что мы делаем, это переключаемся на блог, который передается в функцию. Это делается с помощью функции WordPress switch_to_blog . Для более подробной информации проверьте href = “http://codex.wordpress.org/WPMU_Functions/switch_to_blog”> switch_to_blog в Кодексе WordPress. Затем мы создаем запрос в зависимости от количества постов, которые должны отображаться с помощью WP_Query . Если вы еще не знакомы с ним, вы можете проверить WP_Query в Кодексе WordPress . Затем мы перебираем результаты WP_Query и добавляем в список заголовок и название поста. Затем мы используем функцию restore_current_blog чтобы восстановить блог, который был там до того, как мы переключили блоги.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
function Featured_blog_posts_for_specified_blogs($commaseparatedblogids,$numberofpost) {
 
    $commaseparatedblogids = str_replace (” “, “”, $commaseparatedblogids);
 
    $output = ”;
 
    if(strlen($commaseparatedblogids) > 0 ) {
 
        $blogids = explode(‘,’,$commaseparatedblogids);
         
        foreach($blogids as $blogid) {
 
            $blog_details = get_blog_details($blogid);
            $output .='<li class=”blog_link”><a href=”‘.$blog_details->siteurl. ‘” rel=”bookmark”>’.$blog_details->blogname.'</a> </li>’;
            $output.='<ul>’.Featured_blog_posts_for_blog($blogid,$numberofpost).'</ul>’;
        }
    }
 
    return $output;
}

Эта функция принимает в качестве входных данных список разделенных запятыми идентификаторов блога и количество публикаций, которые мы хотим для каждого блога. В этой функции мы удаляем все пробелы в списке блогов, разделенных запятыми. Затем он разбивается на основе запятой, и мы перебираем каждый идентификатор блога. Затем, используя предыдущую функцию Featured_blog_posts_for_blog мы выбираем записи для каждого блога. Результат создается в списке и возвращается этой функцией.


Теперь мы собираемся создать шорткод для отображения популярных блогов.

1
2
3
4
5
6
7
8
9
function Featured_blog_shortcode($atts, $content = null) {
 
    extract(shortcode_atts(array(‘blogids’ => ”, ‘numberofpost’ => ‘3’), $atts));
     
    if(strlen($blogids) > 0 )
         return ‘<ul>’ .
     
}
add_shortcode(‘FEATURED_BLOG’, ‘Featured_blog_shortcode’);

В функцию Featured_blog_shortcode передаются аргументы из шорткода. Затем, используя функцию shortcode_atts мы объединяем переданные аргументы со значениями по умолчанию. Для более подробной информации читайте href = “http://codex.wordpress.org/Function_Reference/shortcode_atts”> страница shortcode_atts в Кодексе WordPress. Затем мы передаем разделенный запятыми список блогов функции Featured_blog_posts_for_specified_blogs которая извлекает сообщение из этих блогов и возвращает список.


Чтобы использовать шорткод, мы сейчас создадим новый пост, создадим новый пост под названием «Избранные блоги», а затем добавим шорткод в его содержимое как [FEATURED_BLOG blogids="3,1" numberofpost="2"] , см. Также на снимке экрана.

Если мы увидим предварительный просмотр поста, то он будет выглядеть следующим образом, показывая избранные блоги.


Чтобы создать виджет, нам нужно создать класс, который наследуется от WP_Widget . Код для виджета выглядит следующим образом:

01
02
03
04
05
06
07
08
09
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
class FeaturedBlogWidget extends WP_Widget {
 
    function FeaturedBlogWidget() {
        // widget actual processes
        $widget_ops = array(‘classname’ => ‘FeaturedBlogWidget’, ‘description’ => ‘Widget for featured blog’ );
        $this->WP_Widget(‘FeaturedBlogWidget’, ‘FeaturedBlogWidget’, $widget_ops);
    }
 
    function form($instance) {
        // outputs the options form on admin
         $defaults = array( ‘title’ => ‘Featured Blogs’, ‘blogids’ => ” , ‘numberofpost’ => ‘3’);
         $instance = wp_parse_args( (array) $instance, $defaults );
          
         ?>
         <p>
         <label for=”<?php echo $this->get_field_id( ‘title’ ); ?>”><?php echo ‘Title:’;
         <input id=”<?php echo $this->get_field_id( ‘title’ ); ?>” name=”<?php echo $this->get_field_name( ‘title’ ); ?>” value=”<?php echo $instance[‘title’]; ?>” class=”widefat” />
         </p>
         <p>
         <label for=”<?php echo $this->get_field_id( ‘blogids’ ); ?>”><?php echo ‘Blog Ids: Separated By comma’ ;
         <input id=”<?php echo $this->get_field_id( ‘blogids’ ); ?>” name=”<?php echo $this->get_field_name( ‘blogids’ ); ?>” value=”<?php echo $instance[‘blogids’]; ?>” class=”widefat” />
         </p>
         <p>
         <label for=”<?php echo $this->get_field_id( ‘numberofpost’ ); ?>”><?php echo ‘Number of posts per blog’ ;
         <input id=”<?php echo $this->get_field_id( ‘numberofpost’ ); ?>” name=”<?php echo $this->get_field_name( ‘numberofpost’ ); ?>” value=”<?php echo $instance[‘numberofpost’]; ?>” class=”widefat” />
         </p>
 
        <?php
          
    }
 
    function update($new_instance, $old_instance) {
        // processes widget options to be saved
 
         $instance = $old_instance;
         $instance[‘title’] = strip_tags( $new_instance[‘title’] );
         $instance[‘blogids’] = $new_instance[‘blogids’];
         $instance[‘numberofpost’] = $new_instance[‘numberofpost’];
         return $instance;
    }
 
    function widget($args, $instance) {
        // outputs the content of the widget
         extract( $args );
         $title = apply_filters(‘widget_title’, $instance[‘title’] );
         echo $before_widget;
         if ( $title )
            echo $before_title .
             
         echo ‘<ul>’;
         echo Featured_blog_posts_for_specified_blogs($instance[‘blogids’],$instance[‘numberofpost’]);
         echo ‘</ul>’;
         echo $after_widget;
    }
 
}
 
function Featured_blog_widget_init() {
 
    // Check for the required API functions
    if ( !function_exists(‘register_widget’) )
        return;
     
    register_widget(‘FeaturedBlogWidget’);
}
add_action(‘widgets_init’, ‘Featured_blog_widget_init’);

В конструкторе ниже

1
2
3
4
5
function FeaturedBlogWidget() {
    // widget actual processes
    $widget_ops = array(‘classname’ => ‘FeaturedBlogWidget’, ‘description’ => ‘Widget for featured blog’ );
    $this->WP_Widget(‘FeaturedBlogWidget’, ‘FeaturedBlogWidget’, $widget_ops);
}

В этом мы добавим имя и описание для виджета.

В форме функции

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
function form($instance) {
    // outputs the options form on admin
    $defaults = array( ‘title’ => ‘Featured Blogs’, ‘blogids’ => ” , ‘numberofpost’ => ‘3’);
    $instance = wp_parse_args( (array) $instance, $defaults );
 
    ?>
    <p>
    <label for=”<?php echo $this->get_field_id( ‘title’ ); ?>”><?php echo ‘Title:’;
    <input id=”<?php echo $this->get_field_id( ‘title’ ); ?>” name=”<?php echo $this->get_field_name( ‘title’ ); ?>” value=”<?php echo $instance[‘title’]; ?>” class=”widefat” />
    </p>
    <p>
    <label for=”<?php echo $this->get_field_id( ‘blogids’ ); ?>”><?php echo ‘Blog Ids: Separated By comma’ ;
    <input id=”<?php echo $this->get_field_id( ‘blogids’ ); ?>” name=”<?php echo $this->get_field_name( ‘blogids’ ); ?>” value=”<?php echo $instance[‘blogids’]; ?>” class=”widefat” />
    </p>
    <p>
    <label for=”<?php echo $this->get_field_id( ‘numberofpost’ ); ?>”><?php echo ‘Number of posts per blog’ ;
    <input id=”<?php echo $this->get_field_id( ‘numberofpost’ ); ?>” name=”<?php echo $this->get_field_name( ‘numberofpost’ ); ?>” value=”<?php echo $instance[‘numberofpost’]; ?>” class=”widefat” />
    </p>
 
    <?php
 
}

Мы создаем три текстовых поля для

  • Название виджета
  • Список блогов
  • Количество сообщений в блоге для отображения

Здесь мы объединяем значения по умолчанию для виджета со значениями экземпляра, используя функцию wp_parse_args . Для более подробной информации о href = “http://codex.wordpress.org/Function_Reference/wp_parse_args”> wp_parse_args просмотреть страницу в Кодексе WordPress. Виджет в админе теперь должен выглядеть следующим образом.

В обновленной функции

1
2
3
4
5
6
7
8
9
function update($new_instance, $old_instance) {
    // processes widget options to be saved
 
     $instance = $old_instance;
     $instance[‘title’] = strip_tags( $new_instance[‘title’] );
     $instance[‘blogids’] = $new_instance[‘blogids’];
     $instance[‘numberofpost’] = $new_instance[‘numberofpost’];
     return $instance;
}

Мы обновляем title , blogids и функцию blogids когда blogids сохранить, blogids его в экземпляр. В функции виджета

01
02
03
04
05
06
07
08
09
10
11
12
13
function widget($args, $instance) {
    // outputs the content of the widget
    extract( $args );
    $title = apply_filters(‘widget_title’, $instance[‘title’] );
    echo $before_widget;
    if ( $title )
        echo $before_title .
 
    echo ‘<ul>’;
    echo Featured_blog_posts_for_specified_blogs($instance[‘blogids’],$instance[‘numberofpost’]);
    echo ‘</ul>’;
    echo $after_widget;
}

В этой функции мы получаем значения, сохраненные для экземпляра виджета. Заголовок используется в качестве заголовка виджета. Мы получаем значения для списка блогов и количества постов и передаем их в функцию Featured_blog_posts_for_specified_blogs которая возвращает список постов из каждого блога.

Нам нужно зарегистрировать этот виджет

1
2
3
4
5
6
7
8
9
function Featured_blog_widget_init() {
 
    // Check for the required API functions
    if ( !function_exists(‘register_widget’) )
        return;
     
    register_widget(‘FeaturedBlogWidget’);
}
add_action(‘widgets_init’, ‘Featured_blog_widget_init’);

Для регистрации виджета мы используем функцию register_widget в функции Featured_blog_widget_init которая добавляется в хук действия ‘ widgets_init ‘.

Вывод виджета будет выглядеть следующим образом.


WordPress Multisite – отличная платформа для создания сети сайтов. В этом плагине мы увидели, как мы можем создать сетевой плагин для отображения избранных блогов. Создавая такие плагины, мы можем улучшить платформу WordPress Multisite, а также предоставить дополнительные функции, которые нам нужны для сети нашего сайта. Есть также множество плагинов с открытым исходным кодом для WordPress Multisite.

Так что получайте удовольствие, используя WordPress Multisite для вашей сети сайтов!