Plugin base: differenze tra le versioni
Aspetto
| (11 versioni intermedie di 2 utenti non mostrate) | |||
| Riga 39: | Riga 39: | ||
=== my-plugin.php – File di bootstrap === | === my-plugin.php – File di bootstrap === | ||
File principale. | |||
* Avvia il plugin | |||
* Caricando la classe Plugin | |||
function | <pre> | ||
$plugin = new MyPlugin\Core\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->run(); | ||
}); | |||
</pre> | |||
=== Plugin.php – Punto di ingresso OOP === | |||
Crea una nuova istanza del Loader, che inizializza tutte le funzionalità. | |||
<pre> | |||
namespace MyPlugin\Core; | |||
class Plugin { | |||
public function run() { | |||
$loader = new Loader(); | |||
$loader->init(); | |||
} | |||
} | } | ||
</pre> | |||
=== Loader.php – === | |||
Gestione hook e azioni. | |||
<pre> | |||
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(); | |||
} | |||
} | |||
</pre> | |||
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''' | |||
<pre> | |||
GET /wp-json/myplugin/v1/hello | |||
</pre> | |||
'''Risposta''' | |||
<pre> | |||
{ "message": "Ciao dal plugin!" } | |||
</pre> | |||
'''Codice''' | |||
<pre> | |||
register_rest_route('myplugin/v1', '/hello', [ | |||
'methods' => 'GET', | |||
'callback' => [$this, 'handle_hello'], | |||
'permission_callback' => '__return_true' | |||
]); | |||
</pre> | |||
== AJAX – AjaxHandler.php == | |||
'''Azioni registrate:''' | |||
<pre> | |||
add_action('wp_ajax_myplugin_action', [$this, 'handle']); | |||
add_action('wp_ajax_nopriv_myplugin_action', [$this, 'handle']); | |||
</pre> | |||
'''JS (esempio per usarlo):''' | |||
<pre> | |||
jQuery.post( | |||
myplugin_ajax.ajax_url, | |||
{ action: 'myplugin_action' }, | |||
function(response) { | |||
console.log(response.data.message); | |||
} | |||
); | |||
</pre> | |||
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.