Modalitate eficientă de salvare a opțiunilor plugin-urilor

10 aug. 2012, 09:44:37
Vizualizări: 15.6K
Voturi: 5

Mă gândesc la salvarea opțiunilor pentru un plugin pe care îl dezvolt. Primul candidat evident este tabelul wp_options.

În timp ce citeam cartea Pro WP Plugin Development am dat peste următorul pasaj:

Fiecare opțiune salvată adaugă o nouă înregistrare în tabelul de opțiuni WordPress. Poți stoca mai multe opțiuni simultan, într-un singur array: Acest lucru evită aglomerarea bazei de date și actualizează valorile într-o singură interogare MySQL pentru o eficiență și viteză mai mare.

Pe de altă parte, îmi imaginez că dacă plugin-ul are multe setări, ar putea afecta performanța să stochezi totul într-un singur array. Ar avea sens în astfel de cazuri să împarți opțiunile în înregistrări separate?

A treia opțiune la care mă pot gândi este să creez tabele personalizate pentru stocarea setărilor plugin-ului, așa cum am văzut că fac unele plugin-uri.

Care sunt regulile/ghidurile pentru a decide ce abordare să alegi?

0
Toate răspunsurile la întrebare 2
2

Folosește API-ul pentru setări. Este minunat! Iată cum poți face acest lucru pas cu pas.

<?php
/*
 * Adaugă pagina de administrare
 */
add_action('admin_menu', 'wpse61431_admin_page');
function wpse61431_admin_page(){
    add_menu_page('Setări wpse61431', 'wpse61431', 'administrator', 'wpse61431-settings', 'wpse61431_admin_page_callback');
}

/*
 * Înregistrează setările
 */
add_action('admin_init', 'wpse61431_register_settings');
function wpse61431_register_settings(){
    //acest lucru va salva opțiunea în tabelul wp_options ca 'wpse61431_settings'
    //al treilea parametru este o funcție care va valida valorile introduse
    register_setting('wpse61431_settings', 'wpse61431_settings', 'wpse61431_settings_validate');
}

function wpse61431_settings_validate($args){
    //$args va conține valorile postate în formularul de setări, le poți valida ca fără spații permise, fără caractere speciale permise sau validează emailuri etc.
    if(!isset($args['wpse61431_email']) || !is_email($args['wpse61431_email'])){
        //adaugă o eroare de setare deoarece emailul este invalid și face câmpul formularului gol, astfel încât utilizatorul să poată introduce din nou
        $args['wpse61431_email'] = '';
    add_settings_error('wpse61431_settings', 'wpse61431_invalid_email', 'Te rugăm să introduci un email valid!', $type = 'error');   
    }

    //asigură-te că returnezi args
    return $args;
}

//Afișează erorile de validare și mesajele de actualizare
/*
 * Notificări admin
 */
add_action('admin_notices', 'wpse61431_admin_notices');
function wpse61431_admin_notices(){
   settings_errors();
}

//Markup-ul pentru pagina de setări a plugin-ului tău
function wpse61431_admin_page_callback(){ ?>
    <div class="wrap">
    <h2>Setări wpse61431</h2>
    <form action="options.php" method="post"><?php
        settings_fields( 'wpse61431_settings' );
        do_settings_sections( __FILE__ );

        //obține valorile vechi, nu va funcționa prima dată
        $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">Te rugăm să introduci un email valid.</span>
                        </label>
                    </fieldset>
                </td>
            </tr>
        </table>
        <input type="submit" value="Salvează" />
    </form>
</div>
<?php }
?>

Acesta este un cod funcțional, markup-ul poate fi orice dorești, asigură-te că păstrezi apelurile settings_fields și do_settings_sections! Numele câmpurilor de input ar trebui să fie așa cum am menționat.

Pentru informații detaliate, citește această serie minunată pe wp tutsplus.

10 aug. 2012 10:43:38
Comentarii

Mulțumesc, am dat peste acest lucru, dar întrebarea mea este mai degrabă axată pe cum să stochez setările în cel mai bun mod, nu pe cum să construiesc și să salvez pagina de setări.

urok93 urok93
10 aug. 2012 13:13:57

nu uita să închizi return $args cu un ;

AO_ AO_
18 iul. 2014 14:36:54
2

Stochează opțiunile într-un singur array și scrie plugin-ul tău ca o clasă. Încarcă opțiunile în constructor și salvează-le ca variabilă membru, astfel vei avea acces la ele oriunde în plugin.

10 aug. 2012 10:06:55
Comentarii

Cum răspunde acest lucru la întrebarea mea?

urok93 urok93
10 aug. 2012 13:12:45

Este o sugestie despre cum să minimizezi apelurile la baza de date. Cu această soluție, vei încărca array-ul cu opțiunile o singură dată pe instanță de plugin.

pbd pbd
10 aug. 2012 14:19:48