Comment implémenter add_settings_error sur les pages de menu personnalisées?

8

Le livre de développement de plugins WordPress professionnel explique en détail comment utiliser correctement l'API Paramètres, et il montre également comment ajouter des menus et des sous-menus, mais malheureusement il ne fournit aucun exemple joint de cela. Bien que j'aie réussi à en faire fonctionner la plupart, je ne peux pas comprendre comment implémenter correctement add_settings_error sur les pages de menu personnalisées. Voici mon code:

function settings_main_validate( $input ) {
$valid['text_string'] = preg_replace( '/[^a-zA-Z]/', '', $input['text_string'] );

if ( $valid['text_string'] != $input['text_string'] ) {
    //add_setting_error: $title, $id, $error_message, $class
    add_settings_error( 'fields_main_input', 'texterror', 'Incorrect value entered!', 'error' );
}   

return $valid;
}                  

La validation ci-dessus fonctionnera très bien sur les paramètres rendus à l'aide de add_options_page, mais n'affichera pas les erreurs de paramètres sur les pages rendues avec add_menu_page.

jnthnclrk
la source

Réponses:

8

Le processus de création et d'affichage des erreurs / avis comporte plusieurs éléments:

  1. add_settings_error()appel pour ajouter un élément à la pile ( $wp_settings_errorsvariable globale ).
  2. settings_errors transitoire qui conserve les erreurs afin qu'elles survivent se déplacent de page en page.
  3. settings_errors()fonction get_settings_errors()pour récupérer les erreurs de mémoire ou transitoires et affiche ensuite les.

Ceux-ci fonctionnent comme un charme pour l'API Paramètres, mais malheureusement, ils ne sont pas configurés pour une utilisation générique. D'un autre côté, il est trivial de contourner cela.

Accrochez- settings_errors()vous admin_noticessur la page de votre plugin, passez-lui le code d'erreur pour qu'il ne montre que vos trucs.

Enregistrez manuellement les erreurs dans les settings_errorstransitoires (remplissez simplement cette variable globale).

Comme get_settings_errors()attend un indice dans les paramètres GET ( $_GET['settings-updated']) qu'il devrait vérifier les transitoires au lieu de la mémoire, vous pouvez soit fournir cela, soit obtenir des erreurs de transitoires vous-même et les enregistrer de nouveau dans la variable globale avant votre settings_errors()appel.

Mise à jour

Vous transformez cela en un peu de gâchis avec plusieurs questions, donc je vais essayer de répondre à vos préoccupations ici.

API Paramètres fait le travail avec des pages d'administration, qui n'utilisent pas la section Paramètres de base. Votre vrai problème est que dans ce cas, le rapport d'erreurs / avis ne fonctionne pas.

Voici d'abord ce qui se passe lorsque vous publiez un formulaire, configuré avec l'API Paramètres:

  1. Les données sont publiées sur une options.phppage spéciale .
  2. Là, les données sont nettoyées / validées à l'aide du rappel.
  3. Toutes les erreurs / notifications survenues lors de la désinfection / validation sont collectées et enregistrées en transitoire.
  4. Vous êtes redirigé vers votre pays d'origine .

Maintenant, lorsque vous chargez la page d'administration, il vérifie si cette page appartient à la section Paramètres et si ce cas comprend un petit options-head.phpfichier, qui traite de la récupération et de l'affichage des avis d'erreur.

Donc, la seule chose "qui ne fonctionne pas" sur les autres pages est cette dernière étape, ce qui est trivial pour vous faire avec un aperçu de la fonction connexe ci-dessus (je suis probablement entré dans trop de détails sur les transitoires, vous n'en aurez pas besoin pour le cas de base).

Rarst
la source
Êtes-vous en train de dire que l'API Settings n'est pas vraiment conçue pour être utilisée dans les menus et les écrans d'administration?
jnthnclrk
@trnsfrmr bien, ce n'est pas à moi de dire s'il a été conçu ou non , mais il n'est certainement pas configuré pour cela nativement.
2011
Merde, je me suis complètement trompé. Ainsi, l'API Paramètres est uniquement pour les écrans qui vivent sous l'élément de menu Paramètres? Avec le recul, cela explique pourquoi son utilisation sur des menus personnalisés a été si délicate.
jnthnclrk
Il semble dommage que toutes les fonctionnalités intéressantes de l'API Paramètres ne soient pas disponibles pour les plugins utilisant des menus personnalisés.
jnthnclrk
@trnsfrmr vous pouvez toujours essayer de l'utiliser, cela
demande
0

Un peu tard, mais je viens de traverser ça. Sur la base du code OP, la meilleure solution que j'ai trouvée est d'insérer ce code:

function your_admin_notices_action() {
    settings_errors( 'fields_main_input' );
}
add_action( 'admin_notices', 'your_admin_notices_action' );

Cela ajoutera l'affichage de l'avis d'administration aux pages d'administration rendues à l'aide de add_menu_page

Bev
la source
-1

Ajouter simplement

include_once 'options-head.php'; 

à la fonction $ de ma page de menu personnalisée semblait bien fonctionner pour afficher les messages d'erreur sur les pages de menu personnalisé.

James Smartt
la source