API de paramètres dans Multisite - Message de mise à jour manquant

8

Lorsque j'utilise l'API des paramètres dans une installation multisite et que la page d'options se trouve au niveau du réseau, la publication des options sur options.phpne fonctionne pas, car la page d'administration se trouve à wp-admin/networket WP s'attend à ce que la page soit à wp-admin.

J'ai ajouté une fonction qui vérifie si cette installation WP est une installation multi-sites (via la constante) et si c'est le cas, elle change la valeur d'action du formulaire en ../option.php. Cela enregistre les options OK, mais le message par défaut "Paramètres enregistrés". est manquant (cependant, la chaîne de requête inclut settings-updated=true).

Avez-vous des idées sur la façon de faire apparaître le message?

Engoulevent
la source

Réponses:

11

Pour les pages d'options réseau, l'URL d'action de formulaire correcte est:

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

Ensuite, vous devez enregistrer un rappel:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

Dans cette fonction de rappel, inspectez les $_POSTdonnées, préparez les valeurs, puis enregistrez-les:

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

Et puis vous devez créer la redirection sans autre aide:

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

Sur la page des options $_GET['updated'], vérifiez et ajoutez un avis administrateur si vous avez trouvé ce paramètre.

fuxia
la source
L'API Paramètres n'est donc pas disponible sur les pages d'administration réseau? Et ce que @NightHawk avait fait à l'origine, c'était en fait d'enregistrer des options sur le blog principal du réseau et de ne pas les enregistrer sur tout le site, non?
Parham
@Parham Je n'ai pas vu son code, mais je sais que la plupart des parties de l'API Paramètres ne sont pas disponibles sur les pages du réseau ou se comportent de manière étrange. Il n'est pas nécessaire de l'utiliser.
fuxia
0

J'ai utilisé la réponse de @ toscho qui fonctionne très bien, mais dans certains chemins d'installation wordpress, l'URL d'action de formulaire codée en dur ne fonctionnera pas. Ici @birgire indique comment créer l'URL correcte :

Lorsque vous faites référence à des URL au sein de network-admin, vous devriez considérer le network_admin_url (). fonction principale, qui revient à admin_url () pour les configurations non multisites.

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