Vai al contenuto

Plugin base

Da Wiki Marco Cerutti.

Info

Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.

my-plugin/
│
├── my-plugin.php                 # File principale del plugin
├── uninstall.php                # Disinstallazione pulita
│
├── includes/
│   ├── Core/
│   │   ├── Plugin.php           # Classe principale che avvia il plugin
│   │   └── Loader.php           # Classe che carica tutte le componenti
│   │
│   ├── Admin/
│   │   └── SettingsPage.php     # Pannello admin nel backend
│   │
│   ├── Frontend/
│   │   └── ShortcodeHandler.php # Gestione shortcode e risorse frontend
│   │
│   ├── Api/
│   │   └── RestRoutes.php       # Definizione di una rotta REST API
│   │
│   └── Ajax/
│       └── AjaxHandler.php      # Gestione delle chiamate AJAX
│
├── assets/
│   ├── css/
│   ├── js/
│   └── images/
│
└── templates/
    └── admin-settings.php       # HTML della pagina di impostazioni admin

LOGICA DEL PLUGIN

my-plugin.php – File di bootstrap

Avvia il plugin caricando la classe Plugin.

require_once plugin_dir_path(__FILE__) . 'includes/Core/Plugin.php';

function run_my_plugin() {
    $plugin = new MyPlugin\Core\Plugin();
    $plugin->run();
}

run_my_plugin();

Plugin.php – Punto di ingresso OOP

Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.

class Plugin {
    public function run() {
        $loader = new Loader();
        $loader->init();
    }
}

Loader.php – Inizializzazione dei moduli

class Loader {
    public function init() {
        if (is_admin()) {
            (new \MyPlugin\Admin\SettingsPage())->register();
        } else {
            (new \MyPlugin\Frontend\ShortcodeHandler())->register();
        }

        // Extra
        (new \MyPlugin\Api\RestRoutes())->register();
        (new \MyPlugin\Ajax\AjaxHandler())->register();
    }
}

Carica:

  • la pagina admin se sei nel backend
  • gli shortcode e gli script se sei nel frontend
  • sempre la REST API e l’AJAX handler


SettingsPage.php – Menu nel pannello admin

Aggiunge un menu personalizzato in Impostazioni > Il Mio Plugin.

ShortcodeHandler.php – Gestione frontend

  • Registra uno shortcode [my_shortcode]
  • Carica un file CSS dal plugin
  • Ritorna un blocco HTML nel contenuto del post

REST API – RestRoutes.php

Rotta

GET /wp-json/myplugin/v1/hello

Risposta

{ "message": "Ciao dal plugin!" }

Codice

register_rest_route('myplugin/v1', '/hello', [
    'methods' => 'GET',
    'callback' => [$this, 'handle_hello'],
    'permission_callback' => '__return_true'
]);

AJAX – AjaxHandler.php

Azioni registrate:

add_action('wp_ajax_myplugin_action', [$this, 'handle']);
add_action('wp_ajax_nopriv_myplugin_action', [$this, 'handle']);

JS (esempio per usarlo):

jQuery.post(
    myplugin_ajax.ajax_url,
    { action: 'myplugin_action' },
    function(response) {
        console.log(response.data.message);
    }
);

Puoi localizzare lo script con wp_localize_script() per passare ajax_url.