Plugin base: differenze tra le versioni
Aspetto
Nessun oggetto della modifica |
|||
| (5 versioni intermedie di 2 utenti non mostrate) | |||
| Riga 39: | Riga 39: | ||
=== my-plugin.php – File di bootstrap === | === my-plugin.php – File di bootstrap === | ||
Avvia il plugin | File principale. | ||
* Avvia il plugin | |||
* Caricando la classe Plugin | |||
<pre> | <pre> | ||
defined('ABSPATH') || exit; | |||
function | // Autoload minimale per le classi del namespace MyCity\ | ||
$plugin = new MyPlugin\Core\Plugin(); | spl_autoload_register(function ($class) { | ||
// Considera solo le classi del tuo namespace | |||
if (strpos($class, 'MyPlugin\\') !== 0) { | |||
return; | |||
} | |||
// Converte il namespace in percorso file dentro /includes | |||
$relative = str_replace(['MyPlugin\\', '\\'], ['', '/'], $class) . '.php'; | |||
$path = plugin_dir_path(__FILE__) . 'includes/' . $relative; | |||
if (file_exists($path)) { | |||
require_once $path; | |||
} | |||
}); | |||
// Avvio del plugin quando WP ha caricato i plugin | |||
add_action('plugins_loaded', function () { | |||
// Ora l'autoloader è attivo: non serve richiedere Plugin.php a mano | |||
$plugin = new \MyPlugin\Core\Plugin(); | |||
$plugin->run(); | $plugin->run(); | ||
} | }); | ||
</pre> | </pre> | ||
| Riga 58: | Riga 76: | ||
<pre> | <pre> | ||
namespace MyPlugin\Core; | |||
class Plugin { | class Plugin { | ||
public function run() { | public function run() { | ||
| Riga 64: | Riga 84: | ||
} | } | ||
} | } | ||
</pre> | |||
=== Loader.php – === | |||
Gestione hook e azioni. | |||
<pre> | <pre> | ||
namespace MyPlugin\Core; | |||
class Loader { | class Loader { | ||
public function init() { | public function init() { | ||
| Riga 91: | Riga 114: | ||
* gli shortcode e gli script se sei nel frontend | * gli shortcode e gli script se sei nel frontend | ||
* sempre la REST API e l’AJAX handler | * sempre la REST API e l’AJAX handler | ||
=== SettingsPage.php – Menu nel pannello admin === | === SettingsPage.php – Menu nel pannello admin === | ||
| Riga 138: | Riga 160: | ||
</pre> | </pre> | ||
Puoi localizzare lo script con wp_localize_script() per passare ajax_url. | Puoi localizzare lo script con wp_localize_script() per passare ajax_url. | ||
== uninstall.php == | |||
Contiene il codice di disinstallazione. | |||
Versione attuale delle 17:00, 15 ago 2025
Info
[modifica]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
[modifica]my-plugin.php – File di bootstrap
[modifica]File principale.
- Avvia il plugin
- Caricando la classe Plugin
defined('ABSPATH') || exit;
// Autoload minimale per le classi del namespace MyCity\
spl_autoload_register(function ($class) {
// Considera solo le classi del tuo namespace
if (strpos($class, 'MyPlugin\\') !== 0) {
return;
}
// Converte il namespace in percorso file dentro /includes
$relative = str_replace(['MyPlugin\\', '\\'], ['', '/'], $class) . '.php';
$path = plugin_dir_path(__FILE__) . 'includes/' . $relative;
if (file_exists($path)) {
require_once $path;
}
});
// Avvio del plugin quando WP ha caricato i plugin
add_action('plugins_loaded', function () {
// Ora l'autoloader è attivo: non serve richiedere Plugin.php a mano
$plugin = new \MyPlugin\Core\Plugin();
$plugin->run();
});
Plugin.php – Punto di ingresso OOP
[modifica]Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.
namespace MyPlugin\Core;
class Plugin {
public function run() {
$loader = new Loader();
$loader->init();
}
}
Loader.php –
[modifica]Gestione hook e azioni.
namespace MyPlugin\Core;
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
[modifica]Aggiunge un menu personalizzato in Impostazioni > Il Mio Plugin.
ShortcodeHandler.php – Gestione frontend
[modifica]- Registra uno shortcode [my_shortcode]
- Carica un file CSS dal plugin
- Ritorna un blocco HTML nel contenuto del post
REST API – RestRoutes.php
[modifica]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
[modifica]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.
uninstall.php
[modifica]Contiene il codice di disinstallazione.