Metodo efficiente per salvare le opzioni di un plugin

10 ago 2012, 09:44:37
Visualizzazioni: 15.6K
Voti: 5

Sto valutando come salvare le opzioni per un plugin che sto sviluppando. Il primo candidato ovvio è la tabella wp_options.

Leggendo il libro Pro WP Plugin Development ho trovato questo:

Ogni opzione salvata aggiunge un nuovo record nella tabella delle opzioni di WordPress. Puoi semplicemente memorizzare diverse opzioni contemporaneamente, in un unico array: questo evita di ingombrare il database e aggiorna i valori in un'unica query MySQL per una maggiore efficienza e velocità.

D'altra parte, immagino anche che se il plugin ha molte impostazioni potrebbe compromettere le prestazioni memorizzare tutto in un unico array. Avrebbe quindi senso dividere le opzioni in record separati in questi casi?

La terza opzione a cui posso pensare è creare tabelle personalizzate per memorizzare le impostazioni del plugin, come ho visto fare anche da alcuni plugin.

Quali sono le regole/linee guida per decidere quale strada percorrere?

0
Tutte le risposte alla domanda 2
2

Usa l'API delle impostazioni. È fantastica! Ecco come puoi farlo passo dopo passo.

<?php
/*
 * Aggiungi la pagina di amministrazione
 */
add_action('admin_menu', 'wpse61431_admin_page');
function wpse61431_admin_page(){
    add_menu_page('Impostazioni wpse61431', 'wpse61431', 'administrator', 'wpse61431-settings', 'wpse61431_admin_page_callback');
}

/*
 * Registra le impostazioni
 */
add_action('admin_init', 'wpse61431_register_settings');
function wpse61431_register_settings(){
    //questo salverà l'opzione nella tabella wp_options come 'wpse61431_settings'
    //il terzo parametro è una funzione che validerà i valori inseriti
    register_setting('wpse61431_settings', 'wpse61431_settings', 'wpse61431_settings_validate');
}

function wpse61431_settings_validate($args){
    //$args conterrà i valori inviati nel modulo delle impostazioni, puoi validarli come "no spazi permessi", "no caratteri speciali permessi" o validare email ecc.
    if(!isset($args['wpse61431_email']) || !is_email($args['wpse61431_email'])){
        //aggiungi un errore delle impostazioni perché l'email non è valida e rendi vuoto il campo del modulo, così che l'utente possa reinserirlo
        $args['wpse61431_email'] = '';
    add_settings_error('wpse61431_settings', 'wpse61431_invalid_email', 'Per favore inserisci un\'email valida!', $type = 'error');   
    }

    //assicurati di restituire gli args
    return $args;
}

//Mostra gli errori di validazione e i messaggi di aggiornamento
/*
 * Notifiche di amministrazione
 */
add_action('admin_notices', 'wpse61431_admin_notices');
function wpse61431_admin_notices(){
   settings_errors();
}

//Il markup per la pagina delle impostazioni del tuo plugin
function wpse61431_admin_page_callback(){ ?>
    <div class="wrap">
    <h2>Impostazioni wpse61431</h2>
    <form action="options.php" method="post"><?php
        settings_fields( 'wpse61431_settings' );
        do_settings_sections( __FILE__ );

        //ottieni i valori precedenti, non funzionerà la prima volta
        $options = get_option( 'wpse61431_settings' ); ?>
        <table class="form-table">
            <tr>
                <th scope="row">Email</th>
                <td>
                    <fieldset>
                        <label>
                            <input name="wpse61431_settings[wpse61431_email]" type="text" id="wpse61431_email" value="<?php echo (isset($options['wpse61431_email']) && $options['wpse61431_email'] != '') ? $options['wpse61431_email'] : ''; ?>"/>
                            <br />
                            <span class="description">Per favore inserisci un\'email valida.</span>
                        </label>
                    </fieldset>
                </td>
            </tr>
        </table>
        <input type="submit" value="Salva" />
    </form>
</div>
<?php }
?>

Questo è un codice funzionante, il markup può essere quello che preferisci, assicurati di mantenere le chiamate settings_fields e do_settings_sections! Anche i nomi dei campi di input dovrebbero essere come ho specificato.

Per informazioni dettagliate, leggi questa fantastica serie su wp tutsplus.

10 ago 2012 10:43:38
Commenti

Grazie, ho già visto questa soluzione, ma la mia domanda è più focalizzata su come memorizzare al meglio le impostazioni, piuttosto che su come costruire e salvare la pagina delle impostazioni.

urok93 urok93
10 ago 2012 13:13:57

ricordati di chiudere il tuo return $args con un ;

AO_ AO_
18 lug 2014 14:36:54
2

Memorizza le opzioni in un singolo array e scrivi il tuo plugin come una classe. Carica le opzioni nel costruttore e salvalo come variabile membro così avrai accesso ovunque nel plugin.

10 ago 2012 10:06:55
Commenti

Come risponde questo alla mia domanda?

urok93 urok93
10 ago 2012 13:12:45

È un suggerimento su come minimizzare le chiamate al database. Con questa soluzione caricherai l'array con le opzioni solo una volta per ogni istanza del plugin.

pbd pbd
10 ago 2012 14:19:48