Panoramica

Qui trovi una guida pratica per creare un plugin WordPress minimale, ma con scelte corrette: shortcode, pagina impostazioni, sanitizzazione e capability.

1) Struttura del plugin

Crea una cartella in wp-content/plugins, ad esempio:

wp-content/plugins/pc-demo-plugin/
  pc-demo-plugin.php

2) File principale con header

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');

3) Aggiungere una pagina impostazioni (admin)

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>';
}

4) Uso pratico (shortcode)

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

Domande frequenti

Perché usare nonce nelle form admin?

Per proteggere il salvataggio da CSRF: WordPress verifica che l’azione sia partita dall’utente autenticato.

Meglio shortcode o blocco Gutenberg?

Lo shortcode è più rapido per un esempio. Per progetti moderni spesso conviene un blocco Gutenberg, ma dipende dal caso d’uso.

Collegamenti interni