API de configurações no Multisite - Mensagem de atualização ausente

8

Quando uso a API de configurações em uma instalação multisite e a página de opções fica no nível da rede, postar as opções em options.phpnão funciona, porque a página de administração fica wp-admin/networke o WP espera que a página esteja wp-admin.

Eu adicionei uma função que verifica se essa instalação do WP é uma instalação de multsite (por meio da constante) e, se for, altera o valor da ação do formulário para ../option.php. Isso salva as opções OK, mas a mensagem padrão "Configurações salvas". está ausente (no entanto, a string de consulta inclui settings-updated=true).

Alguma idéia de como receber a mensagem?

NightHawk
fonte

Respostas:

11

Para páginas de opções de rede, o URL de ação do formulário correto é:

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

Então você precisa registrar um retorno de chamada:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

Nessa função de retorno de chamada, inspecione os $_POSTdados, prepare os valores e salve-os:

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

E então você deve criar o redirecionamento sem mais ajuda:

// 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;

Na página de opções, verifique $_GET['updated']e adicione um aviso de administrador se você encontrou esse parâmetro.

fuxia
fonte
Portanto, a API de configurações não está disponível nas páginas de administração da rede? E o que o @NightHawk havia feito originalmente foi salvar opções no blog principal da rede e não salvá-las em todo o site, certo?
Parham
@Parham não vi o código dele, mas sei que a maior parte da API de configurações não está disponível nas páginas da rede ou se comporta de maneiras estranhas. Não há necessidade de usar isso.
fuxia
0

Eu tenho usado a resposta do @ toscho, que funciona muito bem, no entanto, em certos caminhos de instalação do wordpress, o URL de ação do formulário codificado não funciona. Aqui, o @birgire indica como criar o URL correto :

Ao se referir a URLs no administrador de rede, você deve considerar o network_admin_url (). função principal, que remonta a admin_url () para configurações não multisite.

echo esc_url( 
    add_query_arg( 
       'action', 
       'your_option_name', 
       network_admin_url( 'edit.php' ) 
    )
);
jgangso
fonte