WordPress стал одной из самых популярных блоговых платформ с открытым исходным кодом. Начиная с WordPress 3.0 WordPressMU также стал частью WordPress. Функция WordPress Multisite позволяет создавать сеть сайтов, которые запускаются из одной и той же установки WordPress. Таким образом, можно загрузить плагин или тему для установки, и она будет доступна для всех сайтов в этой сети WordPress.
В этой статье мы рассмотрим, как создать плагин «Избранные блоги», который создает виджет и шорткод для отображения Избранных блогов при установке WordPress Multisite.
Шаг 1 Установка WordPress Multisite
Если у вас еще не установлена WordPress Multisite, вы можете загрузить последнюю версию WordPress с WordPress.org . В этой статье перечислены шаги по созданию установки WordPress Multisite. Вы можете выполнить шаги, чтобы успешно установить экземпляр WordPress Multisite на свой сервер.
Шаг 2 Создание сетевого плагина
Теперь мы собираемся создать плагин для сети, который будет называться популярным блогом. В вашей папке 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
и мы должны увидеть этот плагин в списке плагинов для сетевого администратора следующим образом. Теперь мы можем активировать этот плагин для всей сети от администратора сети.
Шаг 3 Создание функций для извлечения сообщений из разных блогов
Функция для получения поста из блога
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
мы выбираем записи для каждого блога. Результат создается в списке и возвращается этой функцией.
Шаг 4 Создание шорткода
Теперь мы собираемся создать шорткод для отображения популярных блогов.
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
которая извлекает сообщение из этих блогов и возвращает список.
Шаг 5 Использование шорткода
Чтобы использовать шорткод, мы сейчас создадим новый пост, создадим новый пост под названием «Избранные блоги», а затем добавим шорткод в его содержимое как [FEATURED_BLOG blogids="3,1" numberofpost="2"]
, см. Также на снимке экрана.
Если мы увидим предварительный просмотр поста, то он будет выглядеть следующим образом, показывая избранные блоги.
Шаг 6 Создание избранного виджета блога
Чтобы создать виджет, нам нужно создать класс, который наследуется от 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 для вашей сети сайтов!