web-dev-qa-db-fra.com

Paramètres API dans multisite - Message de mise à jour manquant

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

J'ai ajouté une fonction qui vérifie si cette installation WP est une installation multésite (via la constante) et, le cas échéant, modifie 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 (toutefois, la chaîne de requête inclut settings-updated=true).

Avez-vous des idées pour que le message apparaisse?

8
NightHawk

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

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 données $_POST, 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 aide supplémentaire:

// 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, vérifiez $_GET['updated'] et ajoutez une notification de l'administrateur si vous avez trouvé ce paramètre.

11
fuxia

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

Lorsque vous vous référez à des URL dans l'administrateur du réseau, vous devriez considérer 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' ) 
    )
);
0
jgangso