Это вторая часть создания плагина случайной цитаты, но на этот раз с пользовательскими типами постов.
Во второй версии плагина случайных кавычек мы продвигаемся немного дальше и используем еще несколько инструментов и функций. Пользовательские типы сообщений доступны начиная с WordPress v3.0. Они позволяют разработчикам добавлять различные типы контента в свои плагины и темы, и с этим вы можете легко расширить функциональность CMS WordPress.
Вы можете найти первую версию плагина здесь . Если вы только начинаете с разработки плагинов или хотите быстрое обновление, рекомендуется сначала прочитать это.
1. Основные данные
Это данные, необходимые для каждого плагина. Простые вещи, такие как автор, название плагина, описание и так далее.
01
02
03
04
05
06
07
08
09
10
|
<?php
/*
Plugin Name: Adam’s Random Quote
Version: 2.0
Plugin URI: http://wp.tutsplus.com
Description: Loads a Random Quote from custom post types
Author: Adam Burucs
Author URI: http://wp.tutsplus.com
*/
?>
|
2. Зарегистрируйте пользовательский тип сообщения
Прежде чем мы сможем использовать произвольный тип сообщения, мы должны установить его. В массиве меток необходима форма имени в единственном и множественном числе. Публичный переключатель, установленный в значение true, позволяет пользователям использовать тип записи для администратора. has_archive
устанавливает возможность использовать архив типов has_archive
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<?php
add_action( ‘init’, ‘random_quote’ );
function random_quote() {
register_post_type( ‘random_quote’,
array(
‘labels’ => array(
‘name’ => __( ‘Random Quotes’ ),
‘singular_name’ => __( ‘Random Quote’ )
),
‘public’ => true,
‘has_archive’ => true,
)
);
}
?>
|
3. Создание интерфейса администратора
С помощью функции project_edit_columns
и project_custom_columns
мы можем создать модифицированный интерфейс администратора для пользовательского типа записи, используя поля Person
и Quote
(переопределяя заголовок и описание). Обе эти две функции необходимы для выполнения работы.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
add_filter(«manage_edit-random_quote_columns», «project_edit_columns»);
function project_edit_columns($columns) {
$columns = array(
«cb» => «<input type=\»checkbox\» />»,
«title» => «Person»,
«description» => «Quote»,
);
return $columns;
}
add_action(«manage_posts_custom_column», «project_custom_columns»);
function project_custom_columns($column) {
global $post;
switch ($column) {
case «description»:
the_excerpt();
break;
}
}
?>
|
Это изображение финального плагина.
4. Получить одну случайную цитату из базы данных
С классом WP_Query
мы можем получить один случайный элемент из пользовательских сообщений. Поскольку мы получаем только один элемент, нам не нужен стандартный цикл. Установка этих трех аргументов является обязательной. Переменная $quo
помогает создать строку, основанную на кавычке и ее авторе, которая может сгенерировать пример следующим образом:
«Я никогда не думаю о будущем. Это приходит достаточно скоро».
~ Альберт Эйнштейн
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
<?php
function ab_arq_generate() {
// Retrieve one random quote
$args = array(
‘post_type’ => ‘random_quote’,
‘posts_per_page’ => 1,
‘orderby’ => ‘rand’
);
$query = new WP_Query( $args );
// Build output string
$quo = »;
$quo .= $query->post->post_title;
$quo .= ‘ said «‘;
$quo .= $query->post->post_content;
$quo .= ‘»‘;
return $quo;
}
?>
|
5. Присвоение цитаты элементу описания блога
Чтобы прикрепить сгенерированную кавычку к ее месту, мы используем вспомогательную функцию, после чего переопределяем фильтр по умолчанию (bloginfo).
01
02
03
04
05
06
07
08
09
10
|
<?php
function ab_arq_change_bloginfo( $text, $show ) {
if( ‘description’ == $show ) {
$text = ab_arq_generate();
}
return $text;
}
add_filter( ‘bloginfo’, ‘ab_arq_change_bloginfo’, 10, 2 );
?>
|
6. Окончательный код
Вот что мы сделали, только один файл.
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
<?php
/*
Plugin Name: Adam’s Random Quote
Version: 2.0
Plugin URI: http://burucs.com
Description: Loads a Random Quote from custom post types
Author: Adam Burucs
Author URI: http://burucs.com
*/
// Register custom post type
add_action( ‘init’, ‘ab_arq_random_quote’ );
function ab_arq_random_quote() {
register_post_type( ‘random_quote’,
array(
‘labels’ => array(
‘name’ => __( ‘Random Quotes’ ),
‘singular_name’ => __( ‘Random Quote’ )
),
‘public’ => true,
‘has_archive’ => true,
)
);
}
// Create admin interface
add_filter(«manage_edit-random_quote_columns», «ab_arq_project_edit_columns»);
function ab_arq_project_edit_columns($columns) {
$columns = array(
«cb» => «<input type=\»checkbox\» />»,
«title» => «Person»,
«description» => «Quote»,
);
return $columns;
}
add_action(«manage_posts_custom_column», «ab_arq_project_custom_columns»);
function ab_arq_project_custom_columns($column) {
global $post;
switch ($column) {
case «description»:
the_excerpt();
break;
}
}
// Main function to get quotes
function ab_arq_generate() {
// Retrieve one random quote
$args = array(
‘post_type’ => ‘random_quote’,
‘posts_per_page’ => 1,
‘orderby’ => ‘rand’
);
$query = new WP_Query( $args );
// Build output string
$quo = »;
$quo .= $query->post->post_title;
$quo .= ‘ said «‘;
$quo .= $query->post->post_content;
$quo .= ‘»‘;
return $quo;
}
// Helper function
function ab_arq_change_bloginfo( $text, $show ) {
if( ‘description’ == $show ) {
$text = ab_arq_generate();
}
return $text;
}
// Override default filter with the new quote generator
add_filter( ‘bloginfo’, ‘ab_arq_change_bloginfo’, 10, 2 );
?>
|
7. Резюме
Всего за несколько дополнительных шагов мы создали гораздо более гибкую систему хранения с использованием пользовательских сообщений, однако, обратите внимание, что если вы деактивируете или удалите плагин, цитаты (пользовательские сообщения) останутся в базе данных WordPress. Если вы хотите, чтобы они были удалены, вы должны соответствующим образом расширить этот плагин.