API настроек в Multisite - отсутствует сообщение об обновлении

8

Когда я использую API настроек в многосайтовой установке, а страница опций находится на сетевом уровне, публикация опций options.phpне работает, потому что страница администрирования находится, wp-admin/networkа WP ожидает, что страница будет wp-admin.

Я добавил функцию, которая проверяет, является ли эта установка WP мультисайтовой установкой (через константу), и если это так, она изменяет значение действия формы на ../option.php. Это сохраняет параметры ОК, но сообщение по умолчанию «Настройки сохранены». отсутствует (однако строка запроса включает в себя settings-updated=true).

Есть мысли о том, как заставить сообщение появляться?

NightHawk
источник

Ответы:

11

Для страниц параметров сети правильный URL-адрес действия формы:

wp-admin/network/edit.php?action=your_option_name

Затем вы должны зарегистрировать обратный звонок:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

В этой функции обратного вызова просмотрите $_POSTданные, подготовьте значения и сохраните их:

update_site_option( $this->option_name, $this->option_values );

И тогда вы должны создать перенаправление без дополнительной помощи:

// redirect to settings page in network
wp_redirect(
    add_query_arg(
        array( 'page' => 'your_options_page_slug', 'updated' => 'true' ),
        (is_multisite() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' ))
    )
);
exit;

На странице параметров проверьте $_GET['updated']и добавьте уведомление администратора, если вы нашли этот параметр.

Фуксия
источник
То есть API настроек недоступно на страницах сетевых администраторов? И то, что изначально сделал @NightHawk, на самом деле было сохранение опций в главном блоге сети, а не сохранение их по всему сайту, верно?
Пархам
@Parham Я не видел его код, но я знаю, что большинство частей API настроек либо недоступны на сетевых страницах, либо ведут себя странным образом. Там нет необходимости использовать это.
fuxia
0

Я использовал ответ @ toscho, который прекрасно работает, однако в некоторых путях установки WordPress жестко запрограммированный URL-адрес действия формы не будет работать. Здесь @birgire сообщает, как создать правильный URL :

При обращении к URL-адресам внутри администратора сети, вы должны учитывать network_admin_url (). Базовая функция, которая возвращается к admin_url () для не-многосайтовых установок.

echo esc_url( 
    add_query_arg( 
       'action', 
       'your_option_name', 
       network_admin_url( 'edit.php' ) 
    )
);
jgangso
источник