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