Come visualizzare amministrazione notifica di errore se le impostazioni salvate con successo?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/9985

  •  16-10-2019
  •  | 
  •  

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.

È stato utile?

Soluzione

Ok, penso di avere un'idea di ciò che sta succedendo.

  1. L'elenco degli avvisi ai display viene recuperato da get_settings_errors() ( fonte ).

  2. Questa funzione legge le comunicazioni da $wp_settings_errors globale a meno che non c'è settings_errors insieme transitoria, che trionfi var globale.

  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top