Здравствуйте, сегодня продолжим разбираться в создании плагинов для движка wordpress, а именно, рассмотрим один из способов разработки плагинов – это изучение уже существующих хорошо написанных плагинов, а также их переделке и доработке.
Скачать исходники для статьи можно ниже
Для начала, рекомендую прочитать мою предыдущую статью – Создаем простой плагин wordpress: mnogoblogplugin.
Наверное, вам уже достаточно часто приходилось удалять плагин – Hello Dolly со своего сайта на wordpress – в силу его бесполезности – а вы не задумывались, почему он присутствует во многих сборках движка wordpress?
Плагин Hello Dolly выводит в панели управления wordpress фрагменты текста песни «Hello, Dolly», в исполнении Луи Армстронг.
Оказывается, он служит в качестве демонстрации – как простой и хорошо написанный плагин!
Один из путей создания плагинов для начинающих вебмастеров – это как раз и есть – изучение устройства уже существующих хорошо написанных плагинов.
Давайте же разберемся с плагином Hello, Dolly и немного его доработаем!
Скачать плагин можно по следующему url: “wordpress.org/plugins/hello-dolly”
Скачиваем zip архив, распаковываем и открываем главный файл плагина (плагин простой – поэтому состоит только из одного php файла) – hello.php с помощью бесплатного редактора кода Notepad ++.
1. Вначале идет стандартный информационный заголовок:
... Plugin Name: Hello Dolly Plugin URI: ... Description: This is not just a plugin, it symbolizes the hope and ... Author: Matt Mullenweg Version: 1.6 Author URI: ... */
2. Далее создается новая функция с названием “hello_dolly_get_lyric”, в которой создается некая переменная с именем “lyric”, которой присваиваются фразы из песни:
function hello_dolly_get_lyric() {
/** These are the lyrics to Hello Dolly */
$lyrics = "Hello, Dolly
Well, hello, Dolly
It's so nice to have you back where you belong
You're lookin' swell, Dolly
...
Далее, в данной же функции “hello_dolly_get_lyric”, идет разбиение фраз из песни на строки следующим кодом:
$lyrics = explode( "\n", $lyrics );
После, в этой же функции, происходит случайный выбор (рандомный) нужной строки (фразы):
return wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] );
После чего функция “hello_dolly_get_lyric” закрывается.
3. Следующим шагом создается функция с именем “hello_dolly”
function hello_dolly() {
$chosen = hello_dolly_get_lyric();
echo "<p id='dolly'>$chosen</p>";
}
В данной функции к переменной “chosen” присваивается значение функции “hello_dolly_get_lyric”, а после она (переменная “chosen”) просто выводится (echo) в неком абзаце с идентификатором (id) “dolly” (для того чтобы прописать стили оформления для абзаца – его местоположение).
4. Далее идет зацепка плагина (хук).
add_action( 'admin_notices', 'hello_dolly' );
То есть вывод фразы из песни привязывается к стандартной функции wordpress – “admin_notice” – запускается сразу после загрузки меню панели управления и выводится только в админке.
То есть функция с именем “hello_dolly” выполняется только, когда происходит действие “admin_notice”.
5. Далее идет еще одна функция с именем “dolly_css”, которая прописывает стили оформления для идентификатора (id) “dolly” (который был прописан в пункт 3, смотри выше)
function dolly_css() {
$x = is_rtl() ? 'left' : 'right';
echo "
<style type='text/css'>
#dolly {
float: $x;
padding-$x: 15px;
padding-top: 5px;
margin: 0;
font-size: 11px;
}
</style>
";
}
6. И последнее – снова зацепка плагина (хук плагина)
add_action( 'admin_head', 'dolly_css' );
Который запускает функцию “dolly_css” (стили оформления) при срабатывании стандарной функции wordpress – “admin_head” – запускается когда выводится раздел с тегом <head> в панели управления.
Вот и весь плагин Hello Dolly!
А теперь давайте начнем его дорабатывать и изменять!
Для того, чтобы изменить код плагина достаточно войти в панель управления сайтом на wordpress, в левом меню выбрать пункт “Плагины” и его подпункт “Редактор”, справа в выпадающем списке выбрать нужный нам плагин.
1. Изменим стандартный информационный заголовок.
На следующий:
/* Plugin Name: mnogoblogplugin Plugin URI: /sozdaem-prostoj-plagin-wordpress Description: Преобразует в каждом слове заголовка первую букву из прописной в заглавную. Version: 1.0 Author: Mnogoblog Author URI: https://mnogoblog.ru */
2. Давайте добавим русские слова, вместо слов английской песни, например возьмем мудрые цитаты:
function hello_dolly_get_lyric() {
/** These are the lyrics to Hello Dolly */
$lyrics = "Не нужно много слов, чтобы сказать правду.
Мы бедные, потому что мы честные.
В жизни нет ничего сложного. Это мы сложны. Жизнь — простая штука, и в ней чем проще, тем правильнее.
Умейте прощать, ведь это свойство сильных. Слабые никогда не прощают.";
3. Далее изменим зацепки плагина (хук)
Давайте сделаем вывод мудрых фраз на страницах сайта, а не в админке, для этого привяжем их вывод к стандартной функции wordpress – wp_head.
add_action( 'wp_head', 'hello_dolly' );
, а также зацепку стилей:
add_action( 'wp_head', 'dolly_css' );
4. Давайте изменим сами стили оформления.
Сделаем вывод мудрых фраз по середине:
<style type='text/css'>
#dolly {
padding-top: 15px;
text-align: center;
font-size: 14px;
}
</style>
5. Давайте добавим шорткод к плагину, для того чтобы можно было выводить мудрые фразы в любом месте записей, страничек, в виджетах.
Для этого в конце кода плагина добавим следующую строчку:
add_shortcode('mudrosti', 'hello_dolly');
Теперь, если мы вставим, например внутри записи, следующий шорткод [mudrosti], то наши “мудрые мысли” будут появляться и в записях – на месте данного шоткода.
Незабываем, что шорткод нужно вставлять через “Текстовой редактор” (Text), а не “Визуальный редактор” (Visual).
В результате код плагина у нас будет следующим:
<?php
/**
* @package Hello_Dolly
* @version 1.6
*/
/*
Plugin Name: mnogoblogplugin
Plugin URI: /sozdaem-prostoj-plagin-wordpress
Description: Преобразует в каждом слове заголовка первую букву из прописной в заглавную.
Version: 1.0
Author: Mnogoblog
Author URI: https://mnogoblog.ru
*/
function hello_dolly_get_lyric() {
/** These are the lyrics to Hello Dolly */
$lyrics = "Не нужно много слов, чтобы сказать правду.
Мы бедные, потому что мы честные.
В жизни нет ничего сложного. Это мы сложны. Жизнь — простая штука, и в ней чем проще, тем правильнее.
Умейте прощать, ведь это свойство сильных. Слабые никогда не прощают.";
// Here we split it into lines
$lyrics = explode( "\n", $lyrics );
// And then randomly choose a line
return wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] );
}
// This just echoes the chosen line, we'll position it later
function hello_dolly() {
$chosen = hello_dolly_get_lyric();
echo "<p id='dolly'>$chosen</p>";
}
// Now we set that function up to execute when the admin_notices action is called
add_action( 'wp_head', 'hello_dolly' );
// We need some CSS to position the paragraph
function dolly_css() {
// This makes sure that the positioning is also good for right-to-left languages
$x = is_rtl() ? 'left' : 'right';
echo "
<style type='text/css'>
#dolly {
padding-top: 15px;
text-align: center;
font-size: 14px;
}
</style>
";
}
add_action( 'wp_head', 'dolly_css' );
add_shortcode('mudrosti', 'hello_dolly');
?>
У нас должно получиться следующее:
6. Добавим в панели управления пункт для настройки плагина.
Для начала создадим новый подпункт в пункте “Настройки” (“Параметры”) в панели управления wordpress, для этого вставим в код плагина следующие строчки:
add_action( 'admin_menu', 'my_plugin_menu' );
function my_plugin_menu() {
add_options_page( 'Опции плагина мудрые мысли', 'Мудрые Мысли', 'manage_options', 'my-unique-identifier', 'my_plugin_options' );
}
function my_plugin_options() {
if ( !current_user_can( 'manage_options' ) ) {
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
}
echo '<div class="wrap">';
echo '<p>Здравствуйте, вы находитесь в настройках плагина "Мудрые мысли".</p>';
echo '</div>';
Данным кодом мы создали подпункт с названием “Мудрые Мысли”.
Обращаю внимание, что функция не закрыта – в конце кода нет знака “}” – это сделано для того, чтобы вставить еще код в данную функцию.
Далее давайте продолжим редактировать страничку настройки плагина, а именно: добавим в код плагина поле, для ввода одной из мудрых мыслей – для этого продолжим дополнять код вышеуказанной функции:
// variables for the field and option names
$opt_name = 'mt_favorite_misli';
$hidden_field_name = 'mt_submit_hidden';
$data_field_name = 'mt_favorite_misli';
// Read in existing option value from database
$opt_val = get_option( $opt_name );
// See if the user has posted us some information
// If they did, this hidden field will be set to 'Y'
if( $_POST[ $hidden_field_name ] == 'Y' ) {
// Read their posted value
$opt_val = $_POST[ $data_field_name ];
// Save the posted value in the database
update_option( $opt_name, $opt_val );
// Read their posted value
$opt_val2 = $_POST[ $data_field_name ];
// Save the posted value in the database
update_option( $opt_name2, $opt_val2 );
// Put an options updated message on the screen
?>
<div class="updated"><p><strong><?php _e('Мысль сохранена.', 'mt_trans_domain' ); ?></strong></p></div>
<?php
}
// Now display the options editing screen
echo '<div class="wrap">';
// header
echo "<h2>" . __( 'Настройки плагина', 'mt_trans_domain' ) . "</h2>";
// options form
?>
<form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">
<p><?php _e("Мудрая мысль:", 'mt_trans_domain' ); ?>
<input type="text" name="<?php echo $data_field_name; ?>" value="<?php echo $opt_val; ?>" size="50">
</p><hr />
<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Добавить', 'mt_trans_domain' ) ?>" />
</p>
</form>
</div>
<?php
}
Здесь мы создали форму для ввода мудрой мысли, записали в переменную эту самую мудрую мысль и сохранили ее в базу данных.
После чего страничка настройки нашего плагина будет выглядеть следующим образом:
Далее нам нужно еще отредактировать функцию с выводом мудрых мыслей на сайте:
function hello_dolly_get_lyric() {
/** These are the lyrics to Hello Dolly */
$opt_name = 'mt_favorite_misli';
$opt_val = get_option( $opt_name );
$lyrics = "Не нужно много слов, чтобы сказать правду.
$opt_val";
...
}
То есть здесь мы прописали строчки для чтения переменной с мудрой мыслью, которую мы вводим на страничке настроек плагина, из базы данных, а также вставили данную переменную (opt_val) как одну из строчек мудрых мыслей.
В итоге полный код плагина должен быть следующий:
<?php
/*
Plugin Name: mnogoblogplugin
Plugin URI: /sozdaem-prostoj-plagin-wordpress
Description: Преобразует в каждом слове заголовка первую букву из прописной в заглавную.
Version: 1.0
Author: Mnogoblog
Author URI: https://mnogoblog.ru
*/
function hello_dolly_get_lyric() {
/** These are the lyrics to Hello Dolly */
$opt_name = 'mt_favorite_misli';
$opt_val = get_option( $opt_name );
$lyrics = "Не нужно много слов, чтобы сказать правду.
$opt_val";
// Here we split it into lines
$lyrics = explode( "\n", $lyrics );
// And then randomly choose a line
return wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] );
}
// This just echoes the chosen line, we'll position it later
function hello_dolly() {
$chosen = hello_dolly_get_lyric();
echo "<p id='dolly'>$chosen</p>";
}
// Now we set that function up to execute when the admin_notices action is called
add_action( 'wp_head', 'hello_dolly' );
// We need some CSS to position the paragraph
function dolly_css() {
// This makes sure that the positioning is also good for right-to-left languages
$x = is_rtl() ? 'left' : 'right';
echo "
<style type='text/css'>
#dolly {
padding-$x: 15px;
padding-top: 5px;
margin: 0;
font-size: 11px;
}
</style>
";
}
add_action( 'wp_head', 'dolly_css' );
add_shortcode('privet', 'hello_dolly');
add_action( 'admin_menu', 'my_plugin_menu' );
/** Step 1. */
function my_plugin_menu() {
add_options_page( 'Опции плагина мудрые мысли', 'Настройка плагина ММысли', 'manage_options', 'my-unique-identifier', 'my_plugin_options' );
}
/** Step 3. */
function my_plugin_options() {
if ( !current_user_can( 'manage_options' ) ) {
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
}
echo '<div class="wrap">';
echo '<p>Здравствуйте, вы находитесь в настройках плагина "Мудрые мысли".</p>';
echo '</div>';
// variables for the field and option names
$opt_name = 'mt_favorite_misli';
$hidden_field_name = 'mt_submit_hidden';
$data_field_name = 'mt_favorite_misli';
// Read in existing option value from database
$opt_val = get_option( $opt_name );
// See if the user has posted us some information
// If they did, this hidden field will be set to 'Y'
if( $_POST[ $hidden_field_name ] == 'Y' ) {
// Read their posted value
$opt_val = $_POST[ $data_field_name ];
// Save the posted value in the database
update_option( $opt_name, $opt_val );
// Read their posted value
$opt_val2 = $_POST[ $data_field_name ];
// Save the posted value in the database
update_option( $opt_name2, $opt_val2 );
// Put an options updated message on the screen
?>
<div class="updated"><p><strong><?php _e('Мысль сохранена.', 'mt_trans_domain' ); ?></strong></p></div>
<?php
}
// Now display the options editing screen
echo '<div class="wrap">';
// header
echo "<h2>" . __( 'Настройки плагина', 'mt_trans_domain' ) . "</h2>";
// options form
?>
<form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">
<p><?php _e("Мудрая мысль:", 'mt_trans_domain' ); ?>
<input type="text" name="<?php echo $data_field_name; ?>" value="<?php echo $opt_val; ?>" size="50">
</p><hr />
<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Добавить', 'mt_trans_domain' ) ?>" />
</p>
</form>
</div>
<?php
}
?>
Скачать плагин можно по следующей ссылке – Mnogoblogplugin с настройкой из панели управления wordpress.
PS: Полезные сайты по данной теме:
1. Все существующие на данный момент зацепки плагинов (хуки плагинов wordpress) с их описанием можно найти здесь:
“adambrown.info/p/wp_hooks/hook”

