Продолжаем писать простейший плагин для WordPress (часть 2)

В предыдущей серии мы создали плагин для WordPress с минимальным функционалом. Продолжаем двигаться дальше.

Задача на сегодня – добавить в плагин настройку. Напомню, что наш плагин сейчас умеет добавлять к контенту записи фразу: «Всего хорошего, и спасибо за рыбу!». Сделаем так, чтобы эту фразу можно было менять на произвольную в настройках плагина.

Первое, что сделаем – это добавим в меню администрирования пункт с настройками. Для этого используем обработку события admin_menu:

1
add_action('admin_menu','admin_test_plugin');
add_action('admin_menu','admin_test_plugin');

и функцию обработки события admin_test_plugin

1
2
3
4
5
6
7
8
function admin_test_plugin() {
    $page_title = 'Test plugin 1';
    $menu_title = 'Тестовый плагин';
    $capability = 'manage_options';
    $menu_slug = 'test_plugin_1';
    $admin_function = 'add_options_test_page';
    add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function);
}
function admin_test_plugin() {
	$page_title = 'Test plugin 1';
	$menu_title = 'Тестовый плагин';
	$capability = 'manage_options';
	$menu_slug = 'test_plugin_1';
	$admin_function = 'add_options_test_page';
	add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function);
}

Строка

1
add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function);
add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function);

добавляет в настройки отдельную страницу для нашего плагина. Проиллюстрирую это:
Добавление настроек в плагин WordPress

Если с page_title и menu_title всё понятно, то про другие аргументы стоит разъяснить более подробно.

  • capability — это уровень доступа. Для редактирования настроек он должен быть manage_options
  • menu_slug — уникальное имя для страницы настроек плагина
  • admin_function — функция, которая будет формировать страницу настроек

А вот и сама функция из последнего пункта:

1
2
3
4
5
function add_options_test_page() {
    echo '<h2>Настройки плагина Test plugin 1</h2>';
    add_option('message_text','Всего хорошего, и спасибо за рыбу!');
    change_test_plugin_setup();
}
function add_options_test_page() {
	echo '<h2>Настройки плагина Test plugin 1</h2>';
	add_option('message_text','Всего хорошего, и спасибо за рыбу!');
	change_test_plugin_setup();
}

С помощью функции add_option мы добавили настройку message_text и присвоили начальное значение ‘Всего хорошего, и спасибо за рыбу!’. Если опция message_text уже добавлялась ранее, то функция add_option просто не сработает, а для обновления значения нужна другая функция — update_option.

Функция change_test_plugin_setup() уже непосредственно сохраняет и читает настройки. Её текст, вынесен отдельно только для наглядности:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function change_test_plugin_setup() {
 
    if (isset($_POST['test_plugin_base_setup_btn'])) {
        update_option('message_text', $_POST['message_text']);
    }
    else {
        echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>";
        echo "
            <table>
                <tr>
                    <td>Фраза для добавления: </td>
                    <td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td>
                </tr>
                <tr>
                    <td> </td>
                    <td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td>
                </tr>
            </table>
        ";
        echo "</form>";
    }
 
}
function change_test_plugin_setup() {

	if (isset($_POST['test_plugin_base_setup_btn'])) {
		update_option('message_text', $_POST['message_text']);
	}
	else {
		echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>";
		echo "
			<table>
				<tr>
					<td>Фраза для добавления: </td>
					<td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td>
				</tr>
				<tr>
					<td> </td>
					<td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td>
				</tr>
			</table>
		";
		echo "</form>";
	}

}

Теперь изменим код функции send_message:

1
2
3
4
5
function send_message($content) {
    
    $content = $content.'<h1>'.get_option('message_text').'</h1>';
    return $content;
}
function send_message($content) {
	
	$content = $content.'<h1>'.get_option('message_text').'</h1>';
	return $content;
}

Написание простейшего плагина для WordPress

Написание простейшего плагина для WordPress

Код плагина целиком:

1
2
3
4
5
6
7
8
9
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
<?php
/*
Plugin Name: Test plugin 1
*/
function send_message($content) {
    
    $content = $content.'<h1>'.get_option('message_text').'</h1>';
    return $content;
}
 
function add_options_test_page() {
    echo '<h2>Настройки плагина Test plugin 1</h2>';
    add_option('message_text','Всего хорошего, и спасибо за рыбу!');
    change_test_plugin_setup();
}
 
function change_test_plugin_setup() {
 
    if (isset($_POST['test_plugin_base_setup_btn'])) {
        update_option('message_text', $_POST['message_text']);
    }
    else {
        echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>";
        echo "
            <table>
                <tr>
                    <td>Фраза для добавления: </td>
                    <td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td>
                </tr>
                <tr>
                    <td> </td>
                    <td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td>
                </tr>
            </table>
        ";
        echo "</form>";
    }
 
}
 
function admin_test_plugin() {
    $page_title = 'Test plugin 1';
    $menu_title = 'Тестовый плагин';
    $capability = 'manage_options';
    $menu_slug = 'test_plugin_1';
    $admin_function = 'add_options_test_page';
    add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function);    
}
 
add_action('admin_menu','admin_test_plugin');
add_action('the_content', 'send_message');
?>
<?php
/*
Plugin Name: Test plugin 1
*/
function send_message($content) {
	
	$content = $content.'<h1>'.get_option('message_text').'</h1>';
	return $content;
}

function add_options_test_page() {
	echo '<h2>Настройки плагина Test plugin 1</h2>';
	add_option('message_text','Всего хорошего, и спасибо за рыбу!');
	change_test_plugin_setup();
}

function change_test_plugin_setup() {

	if (isset($_POST['test_plugin_base_setup_btn'])) {
		update_option('message_text', $_POST['message_text']);
	}
	else {
		echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>";
		echo "
			<table>
				<tr>
					<td>Фраза для добавления: </td>
					<td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td>
				</tr>
				<tr>
					<td> </td>
					<td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td>
				</tr>
			</table>
		";
		echo "</form>";
	}

}

function admin_test_plugin() {
	$page_title = 'Test plugin 1';
	$menu_title = 'Тестовый плагин';
	$capability = 'manage_options';
	$menu_slug = 'test_plugin_1';
	$admin_function = 'add_options_test_page';
	add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function);	 
}

add_action('admin_menu','admin_test_plugin');
add_action('the_content', 'send_message');
?>

Я тут недавно писал про мотороловские терминалы сбора данных MC9090. Хочу порекомендовать один сайт, который продаёт ТСД motorola mc3190 — motorola-ua.com.

Bookmark the permalink.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *