Titre semble contre-intuitif mais supporte-moi. :)
J'ai une page d'options, réalisée avec les paramètres de l'API. Lorsque l'utilisateur entre des données non valides, je souhaite afficher un avis d'erreur avec l'appel add_settings_error()
.
Mais! Pour déterminer que les données sont invalides, je dois passer un appel d'API à distance. Cet appel repose sur des données enregistrées. Donc, je ne peux pas faire cela dans le rappel de désinfection (il est recommandé de placer de telles notifications) car mes données ne sont pas encore enregistrées.
Au lieu de cela, j’ai essayé d’enfiler mon chèque dans admin_notices
Cela fonctionne bien la plupart du temps, sauf un (et le plus important) cas - lorsque les paramètres sont enregistrés, ils sont toujours suivis de native Paramètres enregistrés. notice et mes notices personnalisées sont complètement ignorées pour une raison quelconque.
Alors, comment puis-je envoyer cette notification d'erreur même si WP pense que tout va bien?
Modifier
Question plus ciblée - pourquoi exactement Paramètres enregistrés. l'emporte sur les autres avis?
PS je pourrais essayer de faire appel API éventuellement prendre des données en argument au lieu de le lire à partir de l'option enregistrée, mais jusqu'à présent, je pense qu'il va faire des arguments trop volumineux.
Ok, je pense avoir une idée de ce qui se passe.
La liste des avis à afficher est récupérée par get_settings_errors()
( source ).
Cette fonction lit les avis à partir de $wp_settings_errors
global à moins que il y ait settings_errors
ensemble transitoire qui dépasse la variable globale Var.
Lorsque les paramètres sont enregistrés, aucune erreur de configuration n’est vérifiée. Paramètres enregistrés. Avis est généré. Après cela (dans les deux cas), les erreurs sont enregistrées dans le settings_errors
transitoire (je suppose de les conserver lors de la redirection) ( source ).
En gros, quels que soient les avis que vous générez dans votre code, ils seront ignorés lorsque le paramètre transitoire est défini et il le sera toujours après l'enregistrement des paramètres.
Pour moi, il serait logique de concaténer transitoire avec variable globale plutôt que de le rendre exclusif ou choix.
Et je suppose que pour afficher des notifications personnalisées lorsque le paramètre transitoire est défini, je devrai le manipuler, ce qui ne vaut probablement pas la peine.
Une chose que vous pourriez faire, je suppose:
add_settings_error()
Bien sûr, cela défait/abuse quelque peu l'API des paramètres, mais cela pourrait être un moyen.Modifier: le message Paramètres enregistrés ne l'emporte pas sur vos autres avis, il apparaît uniquement car vos autres avis ont déjà été effacés (pour une raison quelconque) du magasin interne settings_error. Pourquoi je ne le sais pas, mais le message Paramètres enregistrés est simplement ajouté au magasin d’erreurs si et seulement s’il est vide. Ce qui pourrait contribuer à votre dilemme est que chaque fois que le magasin d’erreurs de paramètres est lu (via get_settings_errors()
), il est également effacé.