Modalitate eficientă de salvare a opțiunilor plugin-urilor
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?

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.
