Come implementare add_settings_error su pagine di menu personalizzate?


8

Il libro di sviluppo professionale del plugin WordPress spiega in dettaglio come utilizzare correttamente l'API delle impostazioni e mostra anche come aggiungere menu e sottomenu, ma sfortunatamente non fornisce alcun esempio comune di questo. Mentre sono riuscito a far funzionare gran parte di esso, non riesco a capire come implementare correttamente add_settings_error su pagine di menu personalizzate. Ecco il mio codice:

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 convalida sopra funzionerà perfettamente sull'impostazione del rendering utilizzando add_options_page, ma non visualizzerà gli errori di impostazione sulle pagine visualizzate con add_menu_page.

Risposte:


8

Esistono diversi componenti per errori / notare la creazione e il processo di visualizzazione:

  1. add_settings_error()chiama per aggiungere l'elemento allo stack ( $wp_settings_errorsvariabile globale ).
  2. settings_errors transitorio che mantiene gli errori in modo che sopravvivano al passaggio da una pagina all'altra.
  3. settings_errors()funzione get_settings_errors()per recuperare errori dalla memoria o transitori e quindi visualizzarli.

Funzionano come un fascino per l'API delle impostazioni, ma sfortunatamente non sono configurati per l'uso generico. D'altra parte è banale aggirare questo.

Collegalo settings_errors()alla admin_noticespagina del tuo plugin, passa il codice di errore in modo che mostri solo le tue cose.

Salva manualmente gli errori in settings_errorstransitori (inseriscici solo la variabile globale).

Dal momento che si get_settings_errors()aspetta un suggerimento nei parametri GET ( $_GET['settings-updated']) che dovrebbe controllare i transitori anziché la memoria, è possibile fornire tale errore o ottenere errori dai transitori e salvarli nella variabile globale prima della settings_errors()chiamata.

Aggiornare

Lo stai trasformando in un pasticcio con domande multiple, quindi cercherò di rispondere alle tue preoccupazioni qui.

Impostazioni API fa lavoro con pagine di amministrazione, che non usano sezione Impostazioni di base. Il vero problema è che in tal caso la segnalazione di errori / avvisi non funziona.

Innanzitutto ecco cosa succede quando pubblichi un modulo, configurato con l'API delle impostazioni:

  1. I dati vengono pubblicati su una options.phppagina speciale .
  2. I dati vengono disinfettati / convalidati tramite callback.
  3. Qualsiasi errore / avviso emerso durante la sanificazione / convalida viene raccolto e salvato in modo temporaneo.
  4. Verrai reindirizzato da dove vieni .

Ora quando carichi la pagina di amministrazione controlla se questa pagina appartiene alla sezione Impostazioni e se quel caso include un options-head.phpfile minuscolo , che si occupa di recuperare e visualizzare avvisi di errori.

Quindi l'unica cosa "non funzionante" su altre pagine è quest'ultima fase, che è banale fare te stesso con una panoramica della funzione correlata sopra (probabilmente sono entrato in troppi dettagli sul transitorio, non ne avrai bisogno per il caso di base).


Stai dicendo che l'API Impostazioni non è davvero progettata per l'uso nei menu e nelle schermate dell'amministratore?
jnthnclrk,

@trnsfrmr bene, non è il mio posto per dire se è stato o non è stato progettato , ma certamente non è impostato in modo nativo.
Rarst

Dannazione, ho sbagliato completamente allora. Quindi, l'API Impostazioni è solo per schermate che vivono sotto la voce di menu Impostazioni? Con il senno di poi, ciò spiega perché utilizzarlo nei menu personalizzati è stato così complicato.
jnthnclrk,

Sembra un peccato che tutte le fantastiche funzionalità dell'API delle impostazioni non siano disponibili per i plug-in che utilizzano menu personalizzati.
jnthnclrk,

@trnsfrmr bene puoi ancora provare a farne uso, basta uno sforzo extra
Rarst

0

Un po 'in ritardo, ma ci sono appena passato. Sulla base del codice OP, la migliore soluzione che ho trovato è quella di inserire questo codice:

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

Ciò aggiungerà la visualizzazione dell'avviso di amministrazione alle pagine di amministrazione visualizzate utilizzando add_menu_page


-1

Semplicemente aggiungendo

include_once 'options-head.php'; 

alla funzione $ della mia pagina di menu personalizzata sembrava funzionare correttamente per visualizzare i messaggi di errore nelle pagine di menu personalizzate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.