WordPress как на ладони
Новые WordPress шаблоны Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

add_options_page() WP 1.5

Добавляет дочернюю страницу (подменю) в меню админ-панели «Параметры» (Settings).

Функцию нужно вызывать во время события admin_menu.

Заметки
  1. Это функция является оберткой для функции add_submenu_page(). Для которой указывается первый параметр $parent_slug как 'options-general.php', а все остальные параметры просто передаются как есть.

  2. В функции которая выводит контент страницы нужно отдельно проверять доступ пользователя (право).
Работает на основе: add_submenu_page()

Хуков нет.

Возвращает

Строку. hook_suffix вставленной страницы (пункта меню), то что возвращает функция add_submenu_page().

Использование

add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function );
$page_title(строка) (обязательный)
Текст, который будет использован в теге title на странице, настроек.
$menu_title(строка) (обязательный)
Текст, который будет использован в качестве называния для пункта меню.
$capability(строка) (обязательный)
Название права доступа для пользователя, чтобы ему был показан этот пункт меню. Таблицу возможностей смотрите здесь. Этот параметр отвечает и за доступ к странице этого пункта меню.
$menu_slug(строка) (обязательный)

Идентификатор меню. Нужно вписывать уникальную строку.

Не используйте волшебную константу __FILE__ и пробелы. Пробелы будут вырезаны при формировании URL!

Можно, также указать путь от папки плагина до файла, который будет отвечать за страницу настроек плагина, пр. my-plugin/options.php. В этом случае, следующий параметр $function указывать не обязательно.

$function(строка)
Название функции, которая отвечает за код страницы этого пункта меню.
По умолчанию: ''

Примеры

#1 Базовое использование

Пример показывает, как добавить дополнительный пункт меню в раздел "Параметры" меню админ-панели.

add_action('admin_menu', 'my_plugin_menu');
function my_plugin_menu() {
	add_options_page('My Options', 'My Plugin', 'manage_options', 'my-plugin', 'my_plugin_page');
}

function my_plugin_page(){
	echo "Вывод для страницы настроек плагина";
}

#2 Добавление подменю в ООП

Этот пример показывает как добавить подменю в раздел Параметры в PHP Классах:

class options_page {
	function __construct() {
		add_action( 'admin_menu', array( $this, 'admin_menu' ) );
	}
	function admin_menu () {
		add_options_page( 'Page Title','Circle Tree Login','manage_options','options_page_slug', array( $this, 'settings_page' ) );
	}
	function  settings_page () {
		echo 'Тут контент страницы настроек';
	}
}
new options_page;

Код add_options_page: wp-admin/includes/plugin.php VER 4.9.8

<?php
function add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) {
	return add_submenu_page( 'options-general.php', $page_title, $menu_title, $capability, $menu_slug, $function );
}

Cвязанные функции

Из метки: Меню администрирования (admin menu)

Еще из раздела: Админ-панель

6 комментов
  • Александр cайт: brainierweb.com

    Как добавить поля настроек на уже существующую страницу?

    Допустим мой плагин изменяет постоянные ссылки. И там всего два параметра. Как вывести поля для настройки на страницу options-permalink.php?

    Ответить3.4 года назад #
    • Kama6918

      Используйте для этого функции add_settings_section() и add_settings_field(), подробнее все API.

      Вот, для примера, фрагмент моего плагина kama_thumbnail там как раз на страницу media настроек добавляется блок настроек:

      add_action( 'admin_init', 'admin_options' );
      function admin_options(){
      	// Добавляем блок опций на базовую страницу "Чтение"
      	add_settings_section(
      		'kama_thumbnail', // секция
      		'Настройки Kama Thumbnail',
      		'',
      		'media' // страница
      	);
      
      	// Добавляем поля опций. Указываем название, описание, 
      	// функцию выводящую html код поля опции.
      	add_settings_field(
      		'kt_options_field',
      		'Действия: <br><br> <a href="?kt_clear=clear_cache">Очистить кеш картинок</a> <br><br> <a href="?kt_clear=del_customs">Удалить произвольные поля</a>',
      		array( $this, 'options_field'), // можно указать ''
      		'media', // страница
      		'kama_thumbnail' // секция
      	);
      
      	// Регистрируем опции, чтобы они сохранялись при отправке 
      	// $_POST параметров и чтобы callback функции опций выводили их значение.
      	register_setting( 'media', self::$opt_name );
      }
      3
      Ответить3.4 года назад #
  • Возможно ли как-нибудь указать порядок (номер в списке) создаваемого пункта?

    Ответить1.3 год назад #
  • @ Сергей

    Привет. Подскажи, как реализовать отправку post запроса, без перезагрузки, на странице настроек? Суть: плагин, в нем своя страница настроек. Как к разным полям добавить submit, который будет срабатывать только для этого поля и обновлять значение только той опции, к которой относится.

    • @ Сергей

      Где ошибка, не пойму.. После обновления страницы: при клике на submit_button (стандартный wordpress) срабатывает, сохраняются данные, все ок. Дальше клик на submit второй формы, страница обновляется, ничего не происходит. Но при следующих кликах на второй submit - он срабатывает (отправляется post запрос, есть alert), но submit первой формы уже не работает.

                      <form id="qwerty" action="options.php" method="post">
      					<?php
      					// скрытые защитные поля
      					settings_fields('all_group');
      					// секции с настройками (опциями)
      					do_settings_sections('all_page');
      					submit_button();
      					?>
      				</form>
      
      				<script src="http://code.jquery.com/jquery-3.3.1.min.js"></script>
      				<form id="form" action="" method="post">
      					<input type="hidden" name="formdata" value="Текст">
      					<input type="submit" name="submit" class="btn" value="ОТПРАВИТЬ">
      				</form>
      
      				<?php if ($_POST['formdata']) { ?>
      				<script>
      					$(document).ready(function () {
      						$('form').submit(function () {
      							var formID = $(this).attr('id'); // Получение ID формы
      							var formNm = $('#' + formID);
      							if (formID === 'form') {
      								$.ajax({
      									type: 'POST',
      									url: 'assets/ajax.php',
      									data: formNm.serialize(),
      									success: function (data) {
      										alert(data);
      									}
      								});
      							}
      								return false;
      							}
      						);
      					});
      				</script>
      			<?php } ?>
      • @ campusboy3053 cайт: www.youtube.com/c/wpplus

        Попробуй JS так сделать:

        <script>
        	$(document).ready(function () {
        		$(document).on('submit', 'form', function () {
        			var formID = $(this).attr('id'); // Получение ID формы
        			var formNm = $('#' + formID);
        			if (formID === 'form') {
        				$.ajax({
        					type: 'POST',
        					url: 'assets/ajax.php',
        					data: formNm.serialize(),
        					success: function (data) {
        						alert(data);
        					}
        				});
        			}
        				return false;
        			}
        		);
        	});
        </script>
        2
Здравствуйте, !     Войти . Зарегистрироваться