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

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

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

Любые мысли о том, как получить сообщение?

6 голосов | спросил NightHawk 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 20:21:04 +0400 2012, 20:21:04

2 ответа


9

Для сетевых страниц параметров правильный 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'] и добавьте уведомление администратора, если вы нашли этот параметр.

ответил fuxia 14 32012vEurope/Moscow11bEurope/MoscowWed, 14 Nov 2012 04:09:56 +0400 2012, 04:09:56
0

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

  

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

echo esc_url( 
    add_query_arg( 
       'action', 
       'your_option_name', 
       network_admin_url( 'edit.php' ) 
    )
);
ответил jgangso 8 Maypm17 2017, 14:58:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132