# Настройки API для сетевых сайтов (Multisite)
В WordPress существует специальный API, который позволяет легко создавать страницы настроек (опций), например, для плагинов или тем. Данные для этих опций хранятся в таблице настроек. API упрощает создание таких страниц, обеспечивая защиту и следуя логике WordPress. Это значит, что, используя API, не нужно заботиться о HTML коде и CSS стилях формы — все это берет на себя API.
Эта статья является дополнением к статье про настройки API и объясняет, как создать страницу настроек в разделе "Сетевые сайты" (админка мультисайта).
Когда вы активируете режим MU (Multisite), создается отдельный сайт с привычным интерфейсом администратора и секцией "Управление сетью", где настраивается вся сеть.

Итак, по умолчанию API опций не предназначен для использования в сетевых настройках. Основная логика API может быть использована, но нужно учитывать некоторые нюансы, которые мы обсудим.
## Как использовать "Options API" WordPress на страницах администрирования сетевых сайтов (Multisite)
Когда я искал решения этой задачи с помощью Google, я часто сталкивался с неуклюжими и неэффективными подходами. Я предлагаю более удобное решение.
### Суть проблемы
В стандартной версии опция регистрируется с помощью функции register_setting()
, и её значения отправляются через POST-запрос в файл /wp-admin/options.php
. После этого WordPress выполняет всю работу за нас: извлекает, защищает, обрабатывает и сохраняет данные опций в таблице wp_options
. Однако в мультисетевой сети опции нужно сохранять в другой таблице — wp_sitemeta
, и для этого логика API не предназначена.
Была создана задача по этому вопросу, но готового решения пока нет. Это не значит, что задача не решаема — на самом деле, её довольно легко решить.
Запомните различия. В MU сборке WordPress опции для отдельного сайта обрабатываются функциями get_option()
и update_option()
, в то время как сетевые опции обрабатываются через get_network_option()
/get_site_option()
и update_network_option()
/update_site_option()
.
Главное различие в том, что данные сохраняются в разных таблицах, и каждый сайт имеет свои собственные настройки, тогда как сетевые настройки общие для всех сайтов.
Чтобы не запутаться, я покажу различия на примере. Я продемонстрирую, как создается стандартная страница настроек и как создается аналогичная страница для сетевых настроек. Изменений в коде всего 10%.
### Стандартная страница настроек
```php
';
}
if($opt_name === 'my_option_two'){
echo '';
}
}
// Очистка сохраненных данных
function sanitize_callback($options){
foreach($options as $name => &$val){
if($name == 'my_option') $val = sanitize_text_field($val);
if($name == 'my_option_two') $val = intval($val);
}
return $options;
}
?>
В итоге мы получаем такую страницу настроек.
Аналогичная страница настроек для сетевых сайтов
';
}
if($opt_name === 'my_option_two'){
echo '';
}
}
// Очистка сохраненных данных
function sanitize_callback($options){
foreach($options as $name => &$val){
if($name == 'my_option') $val = sanitize_text_field($val);
if($name == 'my_option_two') $val = intval($val);
}
return $options;
}
// СЕТЬ - обновление опций в базе данных
function myplug_options_update(){
// Проверка nonce
check_admin_referer('myplug_nonce');
update_site_option('option_name', wp_unslash($_POST['option_name']));
wp_redirect(network_admin_url('settings.php?page=myplug_slug&updated=true'));
exit;
}
?>
Таким образом, мы получаем такую страницу настроек:
Различия
Вот все различия, чтобы вам не пришлось искать их самостоятельно:
- Используется хук
network_admin_menu
вместоadmin_menu
для регистрации страницы опций. add_submenu_page('settings.php', ...
вместоadd_options_page(...)
— создание подпункта в другом меню.<form action="edit.php?action=myplug_options"
вместо<form action="options.php"
— отправка POST-запроса в файл/network/edit.php
.- Используется
wp_nonce_field()
вместоsettings_fields()
— для защиты. Стандартная функция API здесь не подходит. - Используется
get_site_option()
вместоget_option()
— для сохранения опций в другой таблице. - Добавлен хук
network_admin_edit_(action)
вместе с функциейmyplug_options_update()
, которая сохраняет наши опции с помощьюupdate_site_option()
. Для сети автоматический перехват запроса не работает.
Заключение
Чтобы создать настройки плагина для сетевых сайтов в WordPress, необходимо внести несколько изменений в стандартный код страницы настроек. Следуя вышеописанным шагам, вы сможете воспользоваться функционалом API в окружении мультисайта, что обеспечит удобство в управлении настройками для всей сети.