Plugin管理员设置不仅保存网络管理级别

问题描述 投票:0回答:1
add_action( 'admin_menu', array( &$this, '_settings_menu' ) );
add_action( 'network_admin_menu', array( &$this, '_settings_menu' ) );
我使用[admin_menu]和[network_admin_menuu]操作来为我的插件创建一些选项页面,而保存操作在WordPress Multiete Blogs中运行良好。

但在网络管理级别[

/WP-ADMIN/newets.php?page =plugin_settings

] 不是 [/blog-1/wp-admin/admin.php?page =plugin_settings] 将页面重定向到[/wp-admin/network/options.php]后,出现以下错误,当然不会保存测试值。 找不到对象!在此服务器上找不到请求的URL。参考页面上的链接似乎是错误或过时的。请告知该页面的作者有关错误的信息。如果您认为这是服务器错误,请联系网络管理员。

插件在网络下被激活

WordPress多站点不会自动处理使用

register_settings

创建的字段,您必须自己创建一个更新功能,例如:

wordpress admin multisite
1个回答
0
投票

在您的菜单创建的页面的回调中,表单操作是这样定义的,

options.php
用于单个站点:

<?php
$action = is_network_admin() ? 'edit.php?action=' . self::SLUG . '-update' : 'options.php'; 
?>
<form action="<?php echo $action; ?>" method="POST">
<?php
    settings_fields( self::SLUG . '-page' );
    do_settings_sections( self::SLUG . '-page' );
    submit_button();
?>
</form>

update()方法如下:

public function update() {
    check_admin_referer( self::SLUG . '-page-options' );
    if ( isset( $_POST[ self::SLUG ] ) ) {
        update_site_option( self::SLUG, $_POST[ self::SLUG ] );
    }
    wp_safe_redirect(
        add_query_arg(
            array(
                'page'    => self::SLUG . '-page',
                'updated' => 'true',
            ),
            network_admin_url( 'settings.php' )
        )
    );
    exit;
}

这是行动中所有事物的最小例子:

class Settings_API_Multisite { const SLUG = 'base-for-multisite'; public function __construct() { add_action('plugins_loaded', [$this, 'setup']); } public function setup() { add_action( 'admin_init', [$this, 'init'] ); if (is_multisite()) { add_action('network_admin_menu', [$this, 'admin_menu']); add_action('network_admin_edit_' . self::SLUG . '-update', [$this, 'update']); } } public function init() { if (is_network_admin()) { add_settings_section( 'network-section', __('Working with the Settings API', ''), '__return_false', self::SLUG . '-page' ); add_settings_field( 'the_key', __('Your Key', ''), [$this, 'render_txt_field'], self::SLUG . '-page', 'network-section', [ 'label_for' => 'the_key', 'description' => '', 'class' => '', 'placeholder' => 'Fill your key', ] ); register_setting(self::SLUG . '-page', self::SLUG); } } public function admin_menu() { if (is_multisite()) { $hook = add_submenu_page( 'settings.php', 'My Multisite', 'My Multisite', "manage_network_options", self::SLUG . '-page', [$this, 'create_page'] ); // add_action("admin_print_styles-$hook", [$this, 'styles']); } } public function create_page() { $capabil = is_network_admin() ? 'manage_network_options' : 'manage_options'; if (!current_user_can($capabil)) return; $action = is_network_admin() ? 'edit.php?action=' . self::SLUG . '-update' : 'options.php'; ?> <?php if (isset($_GET['updated'])) : ?> <div id="message" class="updated notice is-dismissible"> <p><?php esc_html_e('Options Saved', ''); ?></p> </div> <?php endif; ?> <div class="wrap"> <h1><?php echo esc_attr(get_admin_page_title()); ?></h1> <form action="<?php echo $action; ?>" method="POST"> <?php settings_fields(self::SLUG . '-page'); do_settings_sections(self::SLUG . '-page'); submit_button(); ?> </form> </div> <?php } public function update() { check_admin_referer(self::SLUG . '-page-options'); if (isset($_POST[self::SLUG])) { update_site_option(self::SLUG, $_POST[self::SLUG]); } wp_safe_redirect( add_query_arg( [ 'page' => self::SLUG . '-page', 'updated' => 'true', ], network_admin_url('settings.php') ) ); exit; } public function render_txt_field($args) { $value = is_network_admin() ? get_site_option(self::SLUG) : get_option(self::SLUG); $option = $args['label_for']; $val = isset($value[$option]) ? $value[$option] : ''; $class = !empty($args['class']) ? " class='{$args['class']}'" : ''; $extra = !empty($args['extra']) ? wp_kses_post($args['extra']) : ''; $placeholder = !empty($args['placeholder']) ? " placeholder='{$args['placeholder']}'" : ''; echo '<input type="text" name="' . self::SLUG . '[' . $option . ']" value="' . esc_attr($val) . '" ' . $class . $placeholder . ' />' . $extra; } } new Settings_API_Multisite();

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.