Perché usare nonce nelle form admin?
Per proteggere il salvataggio da CSRF: WordPress verifica che l’azione sia partita dall’utente autenticato.
Tutorial pratico con esempi di codice: struttura plugin, shortcode, pagina admin e salvataggio opzioni in modo sicuro.
Qui trovi una guida pratica per creare un plugin WordPress minimale, ma con scelte corrette: shortcode, pagina impostazioni, sanitizzazione e capability.
Crea una cartella in wp-content/plugins, ad esempio:
wp-content/plugins/pc-demo-plugin/
pc-demo-plugin.php
WordPress riconosce il plugin dall’header commentato nel file principale. Subito dopo, registra hook e shortcode.
<?php
/**
* Plugin Name: PC Demo Plugin
* Description: Esempio: shortcode + pagina impostazioni.
* Version: 1.0.0
* Author: Pierluigi Covelli
*/
if (!defined('ABSPATH')) {
exit;
}
define('PC_DEMO_OPTION', 'pc_demo_message');
function pc_demo_activate() {
if (get_option(PC_DEMO_OPTION) === false) {
add_option(PC_DEMO_OPTION, 'Messaggio di default dal plugin.');
}
}
register_activation_hook(__FILE__, 'pc_demo_activate');
function pc_demo_shortcode($atts) {
$atts = shortcode_atts([
'title' => 'Demo Plugin',
], $atts, 'pc_demo');
$title = sanitize_text_field($atts['title']);
$message = (string) get_option(PC_DEMO_OPTION, '');
return '<div class="pc-demo">'
. '<strong>' . esc_html($title) . '</strong><br>'
. '<span>' . esc_html($message) . '</span>'
. '</div>';
}
add_shortcode('pc_demo', 'pc_demo_shortcode');
Per gestire un’impostazione via backend, aggiungi una voce di menu e una form con wp_nonce_field e verifica capability.
<?php
function pc_demo_admin_menu() {
add_options_page(
'PC Demo Plugin',
'PC Demo Plugin',
'manage_options',
'pc-demo-plugin',
'pc_demo_render_settings_page'
);
}
add_action('admin_menu', 'pc_demo_admin_menu');
function pc_demo_render_settings_page() {
if (!current_user_can('manage_options')) {
return;
}
if (isset($_POST['pc_demo_save'])) {
check_admin_referer('pc_demo_save_settings');
$newValue = isset($_POST['pc_demo_message']) ? sanitize_text_field(wp_unslash($_POST['pc_demo_message'])) : '';
update_option(PC_DEMO_OPTION, $newValue);
echo '<div class="notice notice-success"><p>Impostazioni salvate.</p></div>';
}
$value = (string) get_option(PC_DEMO_OPTION, '');
echo '<div class="wrap">';
echo '<h1>PC Demo Plugin</h1>';
echo '<form method="post">';
wp_nonce_field('pc_demo_save_settings');
echo '<table class="form-table" role="presentation">';
echo '<tr><th scope="row"><label for="pc_demo_message">Messaggio</label></th>';
echo '<td><input type="text" id="pc_demo_message" name="pc_demo_message" class="regular-text" value="' . esc_attr($value) . '"></td></tr>';
echo '</table>';
echo '<p class="submit"><button type="submit" name="pc_demo_save" class="button button-primary">Salva</button></p>';
echo '</form>';
echo '</div>';
}
Inserisci lo shortcode in una pagina o un articolo:
[pc_demo title="Il mio plugin"]
Best practice: escape in output (esc_html, esc_attr), sanitizza in input (sanitize_text_field), e proteggi le form con nonce.
Keyword: plugin wordpress, shortcode wordpress, wordpress admin, sviluppo plugin
Per proteggere il salvataggio da CSRF: WordPress verifica che l’azione sia partita dall’utente autenticato.
Lo shortcode è più rapido per un esempio. Per progetti moderni spesso conviene un blocco Gutenberg, ma dipende dal caso d’uso.