Здравствуйте, сегодня продолжим разбираться в создании плагинов для движка 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: https://mnogoblog.ru/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: https://mnogoblog.ru/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: https://mnogoblog.ru/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”