один из способов разработки плагинов wordpress

Создаем простой плагин wordpress: часть 2

Здравствуйте, сегодня продолжим разбираться в создании плагинов для движка 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');

?>

У нас должно получиться следующее:

создаем плагин wordpress

 

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”

 

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

Добавить комментарий