Come visualizzare amministrazione notifica di errore se le impostazioni salvate con successo?
Domanda
Titolo suona contro-intuitivo, ma portare con me. :)
Ho pagina delle opzioni, realizzato con le impostazioni API. Quando l'utente inserisce i dati non validi voglio visualizzare notifica di un errore con la chiamata add_settings_error()
.
Ma! Per determinare che i dati è che ho bisogno valida per effettuare una chiamata API a distanza. Quella chiamata si basa su dati salvati. Quindi non posso fare questo in sanificazione callback (che è posto consigliato di gettare tali avvisi) perché la mia tecnica non è ancora salvato.
Invece mi aveva cercato di collegare il mio check-in admin_notices
. Funziona bene la maggior parte del tempo tranne uno (e più importante) caso - quando le impostazioni vengono salvate sono sempre seguiti da nativo impostazioni salvate di preavviso e le mie comunicazioni personalizzate vengono completamente ignorate per qualche motivo.
Quindi, come faccio a lanciare tale avviso di errore anche se WP pensa che tutto va bene?
Modifica
domanda più mirata - perché esattamente impostazioni salvate trionfi altri avvisi
.?PS ho potuto provare a fare chiamata API opzionalmente prendere i dati come argomento, invece di leggerlo dall'opzione salvato, ma finora credo che farà argomenti eccessivamente ingombrante.
Soluzione
Ok, penso di avere un'idea di ciò che sta succedendo.
-
L'elenco degli avvisi ai display viene recuperato da
get_settings_errors()
( fonte ). -
Questa funzione legge le comunicazioni da
$wp_settings_errors
globale a meno che non c'èsettings_errors
insieme transitoria, che trionfi var globale. -
Quando le impostazioni vengono salvate non c'è controllo per errori di impostazione e, se sì impostazioni salvate. avviso viene generato. Dopo di che (in entrambi i casi) errori sono salvati in
settings_errors
transitoria (presumo per conservarli sul reindirizzamento) ( fonte ).
In fondo non importa quale accorge si genera nel codice -. Saranno ignorate quando transitoria è impostato ed è sempre sta per essere impostata dopo aver salvato le impostazioni
In quanto a me avrebbe senso transitorio concatenate con variabile globale piuttosto che come esclusiva o scelta.
E credo alle comunicazioni personalizzate display quando transitorio è impostata ho bisogno di pasticciare con quella transitoria, che probabilmente non è vale la pena.
Altri suggerimenti
Una cosa che si potrebbe fare, credo:
- nel callback di convalida, leggere le impostazioni correnti (potete farlo comunque?) E memorizzarli in una variabile
- controllare tutti gli altri valori prima
- se non sono valide, errori di ritorno, non controllano il valore critico
- se lo sono, memorizzarli nel db (all'interno della vostra funzione di validazione)
- fare la chiamata API remote
- convalidare il valore di difficile
- se valido, restituire l'intero gruppo e di ogni bene
- se non, conservare le vecchie impostazioni che avete ottenuto sul retro principio alla db, fare la tua uscita di errore tramite
add_settings_error()
Certo che un po 'sconfitte / abusi L'API delle impostazioni, ma potrebbe essere un modo.
Modifica: Il messaggio di impostazioni salvate non si vincenti le vostre altre comunicazioni, mostra invece solo fino perché i vostri altri avvisi sono già stati spazzati via (per qualche ragione) dal negozio settings_error interna. Perché questo è il caso non so, ma il messaggio Impostazioni salvate ottiene semplicemente sommato al negozio di errore se e solo se è vuota. Cosa potrebbe contribuire al vostro dilemma è che ogni volta che il negozio di errore di impostazioni viene letto (via get_settings_errors()
) sia anche spazzato via.