<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://wiki.marcocerutti.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=151.81.60.81</id>
	<title>Wiki Marco Cerutti - Contributi dell&amp;#039;utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.marcocerutti.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=151.81.60.81"/>
	<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Speciale:Contributi/151.81.60.81"/>
	<updated>2026-04-17T20:55:56Z</updated>
	<subtitle>Contributi dell&amp;#039;utente</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=15</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=15"/>
		<updated>2025-08-13T13:03:59Z</updated>

		<summary type="html">&lt;p&gt;151.81.60.81: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-plugin/&lt;br /&gt;
│&lt;br /&gt;
├── my-plugin.php                 # File principale del plugin&lt;br /&gt;
├── uninstall.php                # Disinstallazione pulita&lt;br /&gt;
│&lt;br /&gt;
├── includes/&lt;br /&gt;
│   ├── Core/&lt;br /&gt;
│   │   ├── Plugin.php           # Classe principale che avvia il plugin&lt;br /&gt;
│   │   └── Loader.php           # Classe che carica tutte le componenti&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Admin/&lt;br /&gt;
│   │   └── SettingsPage.php     # Pannello admin nel backend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Frontend/&lt;br /&gt;
│   │   └── ShortcodeHandler.php # Gestione shortcode e risorse frontend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Api/&lt;br /&gt;
│   │   └── RestRoutes.php       # Definizione di una rotta REST API&lt;br /&gt;
│   │&lt;br /&gt;
│   └── Ajax/&lt;br /&gt;
│       └── AjaxHandler.php      # Gestione delle chiamate AJAX&lt;br /&gt;
│&lt;br /&gt;
├── assets/&lt;br /&gt;
│   ├── css/&lt;br /&gt;
│   ├── js/&lt;br /&gt;
│   └── images/&lt;br /&gt;
│&lt;br /&gt;
└── templates/&lt;br /&gt;
    └── admin-settings.php       # HTML della pagina di impostazioni admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOGICA DEL PLUGIN ==&lt;br /&gt;
&lt;br /&gt;
=== my-plugin.php – File di bootstrap ===&lt;br /&gt;
&lt;br /&gt;
Avvia il plugin caricando la classe Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once plugin_dir_path(__FILE__) . &#039;includes/Core/Plugin.php&#039;;&lt;br /&gt;
&lt;br /&gt;
function run_my_plugin() {&lt;br /&gt;
    $plugin = new MyPlugin\Core\Plugin();&lt;br /&gt;
    $plugin-&amp;gt;run();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
run_my_plugin();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugin.php – Punto di ingresso OOP ===&lt;br /&gt;
&lt;br /&gt;
Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Plugin {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        $loader = new Loader();&lt;br /&gt;
        $loader-&amp;gt;init();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loader.php – Inizializzazione dei moduli ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Loader {&lt;br /&gt;
    public function init() {&lt;br /&gt;
        if (is_admin()) {&lt;br /&gt;
            (new \MyPlugin\Admin\SettingsPage())-&amp;gt;register();&lt;br /&gt;
        } else {&lt;br /&gt;
            (new \MyPlugin\Frontend\ShortcodeHandler())-&amp;gt;register();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Extra&lt;br /&gt;
        (new \MyPlugin\Api\RestRoutes())-&amp;gt;register();&lt;br /&gt;
        (new \MyPlugin\Ajax\AjaxHandler())-&amp;gt;register();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Carica:&lt;br /&gt;
&lt;br /&gt;
* la pagina admin se sei nel backend&lt;br /&gt;
* gli shortcode e gli script se sei nel frontend&lt;br /&gt;
* sempre la REST API e l’AJAX handler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SettingsPage.php – Menu nel pannello admin ===&lt;br /&gt;
Aggiunge un menu personalizzato in Impostazioni &amp;gt; Il Mio Plugin.&lt;br /&gt;
&lt;br /&gt;
=== ShortcodeHandler.php – Gestione frontend ===&lt;br /&gt;
* Registra uno shortcode [my_shortcode]&lt;br /&gt;
* Carica un file CSS dal plugin&lt;br /&gt;
* Ritorna un blocco HTML nel contenuto del post&lt;br /&gt;
&lt;br /&gt;
== REST API – RestRoutes.php ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotta&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /wp-json/myplugin/v1/hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Risposta&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;message&amp;quot;: &amp;quot;Ciao dal plugin!&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Codice&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_rest_route(&#039;myplugin/v1&#039;, &#039;/hello&#039;, [&lt;br /&gt;
    &#039;methods&#039; =&amp;gt; &#039;GET&#039;,&lt;br /&gt;
    &#039;callback&#039; =&amp;gt; [$this, &#039;handle_hello&#039;],&lt;br /&gt;
    &#039;permission_callback&#039; =&amp;gt; &#039;__return_true&#039;&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== AJAX – AjaxHandler.php ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Azioni registrate:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
add_action(&#039;wp_ajax_myplugin_action&#039;, [$this, &#039;handle&#039;]);&lt;br /&gt;
add_action(&#039;wp_ajax_nopriv_myplugin_action&#039;, [$this, &#039;handle&#039;]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;JS (esempio per usarlo):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery.post(&lt;br /&gt;
    myplugin_ajax.ajax_url,&lt;br /&gt;
    { action: &#039;myplugin_action&#039; },&lt;br /&gt;
    function(response) {&lt;br /&gt;
        console.log(response.data.message);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puoi localizzare lo script con wp_localize_script() per passare ajax_url.&lt;br /&gt;
&lt;br /&gt;
== uninstall.php ==&lt;br /&gt;
Contiene il codice di disinstallazione.&lt;/div&gt;</summary>
		<author><name>151.81.60.81</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=14</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=14"/>
		<updated>2025-08-13T13:03:03Z</updated>

		<summary type="html">&lt;p&gt;151.81.60.81: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-plugin/&lt;br /&gt;
│&lt;br /&gt;
├── my-plugin.php                 # File principale del plugin&lt;br /&gt;
├── uninstall.php                # Disinstallazione pulita&lt;br /&gt;
│&lt;br /&gt;
├── includes/&lt;br /&gt;
│   ├── Core/&lt;br /&gt;
│   │   ├── Plugin.php           # Classe principale che avvia il plugin&lt;br /&gt;
│   │   └── Loader.php           # Classe che carica tutte le componenti&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Admin/&lt;br /&gt;
│   │   └── SettingsPage.php     # Pannello admin nel backend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Frontend/&lt;br /&gt;
│   │   └── ShortcodeHandler.php # Gestione shortcode e risorse frontend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Api/&lt;br /&gt;
│   │   └── RestRoutes.php       # Definizione di una rotta REST API&lt;br /&gt;
│   │&lt;br /&gt;
│   └── Ajax/&lt;br /&gt;
│       └── AjaxHandler.php      # Gestione delle chiamate AJAX&lt;br /&gt;
│&lt;br /&gt;
├── assets/&lt;br /&gt;
│   ├── css/&lt;br /&gt;
│   ├── js/&lt;br /&gt;
│   └── images/&lt;br /&gt;
│&lt;br /&gt;
└── templates/&lt;br /&gt;
    └── admin-settings.php       # HTML della pagina di impostazioni admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOGICA DEL PLUGIN ==&lt;br /&gt;
&lt;br /&gt;
=== my-plugin.php – File di bootstrap ===&lt;br /&gt;
&lt;br /&gt;
Avvia il plugin caricando la classe Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once plugin_dir_path(__FILE__) . &#039;includes/Core/Plugin.php&#039;;&lt;br /&gt;
&lt;br /&gt;
function run_my_plugin() {&lt;br /&gt;
    $plugin = new MyPlugin\Core\Plugin();&lt;br /&gt;
    $plugin-&amp;gt;run();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
run_my_plugin();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugin.php – Punto di ingresso OOP ===&lt;br /&gt;
&lt;br /&gt;
Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Plugin {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        $loader = new Loader();&lt;br /&gt;
        $loader-&amp;gt;init();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loader.php – Inizializzazione dei moduli ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Loader {&lt;br /&gt;
    public function init() {&lt;br /&gt;
        if (is_admin()) {&lt;br /&gt;
            (new \MyPlugin\Admin\SettingsPage())-&amp;gt;register();&lt;br /&gt;
        } else {&lt;br /&gt;
            (new \MyPlugin\Frontend\ShortcodeHandler())-&amp;gt;register();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Extra&lt;br /&gt;
        (new \MyPlugin\Api\RestRoutes())-&amp;gt;register();&lt;br /&gt;
        (new \MyPlugin\Ajax\AjaxHandler())-&amp;gt;register();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Carica:&lt;br /&gt;
&lt;br /&gt;
* la pagina admin se sei nel backend&lt;br /&gt;
* gli shortcode e gli script se sei nel frontend&lt;br /&gt;
* sempre la REST API e l’AJAX handler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SettingsPage.php – Menu nel pannello admin ===&lt;br /&gt;
Aggiunge un menu personalizzato in Impostazioni &amp;gt; Il Mio Plugin.&lt;br /&gt;
&lt;br /&gt;
=== ShortcodeHandler.php – Gestione frontend ===&lt;br /&gt;
* Registra uno shortcode [my_shortcode]&lt;br /&gt;
* Carica un file CSS dal plugin&lt;br /&gt;
* Ritorna un blocco HTML nel contenuto del post&lt;br /&gt;
&lt;br /&gt;
== REST API – RestRoutes.php ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotta&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /wp-json/myplugin/v1/hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Risposta&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;message&amp;quot;: &amp;quot;Ciao dal plugin!&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Codice&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_rest_route(&#039;myplugin/v1&#039;, &#039;/hello&#039;, [&lt;br /&gt;
    &#039;methods&#039; =&amp;gt; &#039;GET&#039;,&lt;br /&gt;
    &#039;callback&#039; =&amp;gt; [$this, &#039;handle_hello&#039;],&lt;br /&gt;
    &#039;permission_callback&#039; =&amp;gt; &#039;__return_true&#039;&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== AJAX – AjaxHandler.php ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Azioni registrate:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
add_action(&#039;wp_ajax_myplugin_action&#039;, [$this, &#039;handle&#039;]);&lt;br /&gt;
add_action(&#039;wp_ajax_nopriv_myplugin_action&#039;, [$this, &#039;handle&#039;]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;JS (esempio per usarlo):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery.post(&lt;br /&gt;
    myplugin_ajax.ajax_url,&lt;br /&gt;
    { action: &#039;myplugin_action&#039; },&lt;br /&gt;
    function(response) {&lt;br /&gt;
        console.log(response.data.message);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puoi localizzare lo script con wp_localize_script() per passare ajax_url.&lt;/div&gt;</summary>
		<author><name>151.81.60.81</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=13</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=13"/>
		<updated>2025-08-13T13:01:34Z</updated>

		<summary type="html">&lt;p&gt;151.81.60.81: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-plugin/&lt;br /&gt;
│&lt;br /&gt;
├── my-plugin.php                 # File principale del plugin&lt;br /&gt;
├── uninstall.php                # Disinstallazione pulita&lt;br /&gt;
│&lt;br /&gt;
├── includes/&lt;br /&gt;
│   ├── Core/&lt;br /&gt;
│   │   ├── Plugin.php           # Classe principale che avvia il plugin&lt;br /&gt;
│   │   └── Loader.php           # Classe che carica tutte le componenti&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Admin/&lt;br /&gt;
│   │   └── SettingsPage.php     # Pannello admin nel backend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Frontend/&lt;br /&gt;
│   │   └── ShortcodeHandler.php # Gestione shortcode e risorse frontend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Api/&lt;br /&gt;
│   │   └── RestRoutes.php       # Definizione di una rotta REST API&lt;br /&gt;
│   │&lt;br /&gt;
│   └── Ajax/&lt;br /&gt;
│       └── AjaxHandler.php      # Gestione delle chiamate AJAX&lt;br /&gt;
│&lt;br /&gt;
├── assets/&lt;br /&gt;
│   ├── css/&lt;br /&gt;
│   ├── js/&lt;br /&gt;
│   └── images/&lt;br /&gt;
│&lt;br /&gt;
└── templates/&lt;br /&gt;
    └── admin-settings.php       # HTML della pagina di impostazioni admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOGICA DEL PLUGIN ==&lt;br /&gt;
&lt;br /&gt;
=== my-plugin.php – File di bootstrap ===&lt;br /&gt;
&lt;br /&gt;
Avvia il plugin caricando la classe Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once plugin_dir_path(__FILE__) . &#039;includes/Core/Plugin.php&#039;;&lt;br /&gt;
&lt;br /&gt;
function run_my_plugin() {&lt;br /&gt;
    $plugin = new MyPlugin\Core\Plugin();&lt;br /&gt;
    $plugin-&amp;gt;run();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
run_my_plugin();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugin.php – Punto di ingresso OOP ===&lt;br /&gt;
&lt;br /&gt;
Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Plugin {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        $loader = new Loader();&lt;br /&gt;
        $loader-&amp;gt;init();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loader.php – Inizializzazione dei moduli ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Loader {&lt;br /&gt;
    public function init() {&lt;br /&gt;
        if (is_admin()) {&lt;br /&gt;
            (new \MyPlugin\Admin\SettingsPage())-&amp;gt;register();&lt;br /&gt;
        } else {&lt;br /&gt;
            (new \MyPlugin\Frontend\ShortcodeHandler())-&amp;gt;register();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Extra&lt;br /&gt;
        (new \MyPlugin\Api\RestRoutes())-&amp;gt;register();&lt;br /&gt;
        (new \MyPlugin\Ajax\AjaxHandler())-&amp;gt;register();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Carica:&lt;br /&gt;
&lt;br /&gt;
* la pagina admin se sei nel backend&lt;br /&gt;
* gli shortcode e gli script se sei nel frontend&lt;br /&gt;
* sempre la REST API e l’AJAX handler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SettingsPage.php – Menu nel pannello admin ===&lt;br /&gt;
Aggiunge un menu personalizzato in Impostazioni &amp;gt; Il Mio Plugin.&lt;br /&gt;
&lt;br /&gt;
=== ShortcodeHandler.php – Gestione frontend ===&lt;br /&gt;
* Registra uno shortcode [my_shortcode]&lt;br /&gt;
* Carica un file CSS dal plugin&lt;br /&gt;
* Ritorna un blocco HTML nel contenuto del post&lt;br /&gt;
&lt;br /&gt;
== REST API – RestRoutes.php ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotta&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /wp-json/myplugin/v1/hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Risposta&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &amp;quot;message&amp;quot;: &amp;quot;Ciao dal plugin!&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Codice&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_rest_route(&#039;myplugin/v1&#039;, &#039;/hello&#039;, [&lt;br /&gt;
    &#039;methods&#039; =&amp;gt; &#039;GET&#039;,&lt;br /&gt;
    &#039;callback&#039; =&amp;gt; [$this, &#039;handle_hello&#039;],&lt;br /&gt;
    &#039;permission_callback&#039; =&amp;gt; &#039;__return_true&#039;&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>151.81.60.81</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=12</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=12"/>
		<updated>2025-08-13T12:59:41Z</updated>

		<summary type="html">&lt;p&gt;151.81.60.81: /* LOGICA DEL PLUGIN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-plugin/&lt;br /&gt;
│&lt;br /&gt;
├── my-plugin.php                 # File principale del plugin&lt;br /&gt;
├── uninstall.php                # Disinstallazione pulita&lt;br /&gt;
│&lt;br /&gt;
├── includes/&lt;br /&gt;
│   ├── Core/&lt;br /&gt;
│   │   ├── Plugin.php           # Classe principale che avvia il plugin&lt;br /&gt;
│   │   └── Loader.php           # Classe che carica tutte le componenti&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Admin/&lt;br /&gt;
│   │   └── SettingsPage.php     # Pannello admin nel backend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Frontend/&lt;br /&gt;
│   │   └── ShortcodeHandler.php # Gestione shortcode e risorse frontend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Api/&lt;br /&gt;
│   │   └── RestRoutes.php       # Definizione di una rotta REST API&lt;br /&gt;
│   │&lt;br /&gt;
│   └── Ajax/&lt;br /&gt;
│       └── AjaxHandler.php      # Gestione delle chiamate AJAX&lt;br /&gt;
│&lt;br /&gt;
├── assets/&lt;br /&gt;
│   ├── css/&lt;br /&gt;
│   ├── js/&lt;br /&gt;
│   └── images/&lt;br /&gt;
│&lt;br /&gt;
└── templates/&lt;br /&gt;
    └── admin-settings.php       # HTML della pagina di impostazioni admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOGICA DEL PLUGIN ==&lt;br /&gt;
&lt;br /&gt;
=== my-plugin.php – File di bootstrap ===&lt;br /&gt;
&lt;br /&gt;
Avvia il plugin caricando la classe Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once plugin_dir_path(__FILE__) . &#039;includes/Core/Plugin.php&#039;;&lt;br /&gt;
&lt;br /&gt;
function run_my_plugin() {&lt;br /&gt;
    $plugin = new MyPlugin\Core\Plugin();&lt;br /&gt;
    $plugin-&amp;gt;run();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
run_my_plugin();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugin.php – Punto di ingresso OOP ===&lt;br /&gt;
&lt;br /&gt;
Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Plugin {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        $loader = new Loader();&lt;br /&gt;
        $loader-&amp;gt;init();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loader.php – Inizializzazione dei moduli ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Loader {&lt;br /&gt;
    public function init() {&lt;br /&gt;
        if (is_admin()) {&lt;br /&gt;
            (new \MyPlugin\Admin\SettingsPage())-&amp;gt;register();&lt;br /&gt;
        } else {&lt;br /&gt;
            (new \MyPlugin\Frontend\ShortcodeHandler())-&amp;gt;register();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Extra&lt;br /&gt;
        (new \MyPlugin\Api\RestRoutes())-&amp;gt;register();&lt;br /&gt;
        (new \MyPlugin\Ajax\AjaxHandler())-&amp;gt;register();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Carica:&lt;br /&gt;
&lt;br /&gt;
* la pagina admin se sei nel backend&lt;br /&gt;
* gli shortcode e gli script se sei nel frontend&lt;br /&gt;
* sempre la REST API e l’AJAX handler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SettingsPage.php – Menu nel pannello admin ===&lt;br /&gt;
Aggiunge un menu personalizzato in Impostazioni &amp;gt; Il Mio Plugin.&lt;br /&gt;
&lt;br /&gt;
=== ShortcodeHandler.php – Gestione frontend ===&lt;br /&gt;
* Registra uno shortcode [my_shortcode]&lt;br /&gt;
* Carica un file CSS dal plugin&lt;br /&gt;
* Ritorna un blocco HTML nel contenuto del post&lt;/div&gt;</summary>
		<author><name>151.81.60.81</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=11</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=11"/>
		<updated>2025-08-13T12:58:17Z</updated>

		<summary type="html">&lt;p&gt;151.81.60.81: /* LOGICA DEL PLUGIN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-plugin/&lt;br /&gt;
│&lt;br /&gt;
├── my-plugin.php                 # File principale del plugin&lt;br /&gt;
├── uninstall.php                # Disinstallazione pulita&lt;br /&gt;
│&lt;br /&gt;
├── includes/&lt;br /&gt;
│   ├── Core/&lt;br /&gt;
│   │   ├── Plugin.php           # Classe principale che avvia il plugin&lt;br /&gt;
│   │   └── Loader.php           # Classe che carica tutte le componenti&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Admin/&lt;br /&gt;
│   │   └── SettingsPage.php     # Pannello admin nel backend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Frontend/&lt;br /&gt;
│   │   └── ShortcodeHandler.php # Gestione shortcode e risorse frontend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Api/&lt;br /&gt;
│   │   └── RestRoutes.php       # Definizione di una rotta REST API&lt;br /&gt;
│   │&lt;br /&gt;
│   └── Ajax/&lt;br /&gt;
│       └── AjaxHandler.php      # Gestione delle chiamate AJAX&lt;br /&gt;
│&lt;br /&gt;
├── assets/&lt;br /&gt;
│   ├── css/&lt;br /&gt;
│   ├── js/&lt;br /&gt;
│   └── images/&lt;br /&gt;
│&lt;br /&gt;
└── templates/&lt;br /&gt;
    └── admin-settings.php       # HTML della pagina di impostazioni admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOGICA DEL PLUGIN ==&lt;br /&gt;
&lt;br /&gt;
=== my-plugin.php – File di bootstrap ===&lt;br /&gt;
&lt;br /&gt;
Avvia il plugin caricando la classe Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once plugin_dir_path(__FILE__) . &#039;includes/Core/Plugin.php&#039;;&lt;br /&gt;
&lt;br /&gt;
function run_my_plugin() {&lt;br /&gt;
    $plugin = new MyPlugin\Core\Plugin();&lt;br /&gt;
    $plugin-&amp;gt;run();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
run_my_plugin();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugin.php – Punto di ingresso OOP ===&lt;br /&gt;
&lt;br /&gt;
Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Plugin {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        $loader = new Loader();&lt;br /&gt;
        $loader-&amp;gt;init();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loader.php – Inizializzazione dei moduli ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Loader {&lt;br /&gt;
    public function init() {&lt;br /&gt;
        if (is_admin()) {&lt;br /&gt;
            (new \MyPlugin\Admin\SettingsPage())-&amp;gt;register();&lt;br /&gt;
        } else {&lt;br /&gt;
            (new \MyPlugin\Frontend\ShortcodeHandler())-&amp;gt;register();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Extra&lt;br /&gt;
        (new \MyPlugin\Api\RestRoutes())-&amp;gt;register();&lt;br /&gt;
        (new \MyPlugin\Ajax\AjaxHandler())-&amp;gt;register();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Carica:&lt;br /&gt;
&lt;br /&gt;
* la pagina admin se sei nel backend&lt;br /&gt;
* gli shortcode e gli script se sei nel frontend&lt;br /&gt;
* sempre la REST API e l’AJAX handler&lt;/div&gt;</summary>
		<author><name>151.81.60.81</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=10</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=10"/>
		<updated>2025-08-13T12:56:59Z</updated>

		<summary type="html">&lt;p&gt;151.81.60.81: /* LOGICA DEL PLUGIN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-plugin/&lt;br /&gt;
│&lt;br /&gt;
├── my-plugin.php                 # File principale del plugin&lt;br /&gt;
├── uninstall.php                # Disinstallazione pulita&lt;br /&gt;
│&lt;br /&gt;
├── includes/&lt;br /&gt;
│   ├── Core/&lt;br /&gt;
│   │   ├── Plugin.php           # Classe principale che avvia il plugin&lt;br /&gt;
│   │   └── Loader.php           # Classe che carica tutte le componenti&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Admin/&lt;br /&gt;
│   │   └── SettingsPage.php     # Pannello admin nel backend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Frontend/&lt;br /&gt;
│   │   └── ShortcodeHandler.php # Gestione shortcode e risorse frontend&lt;br /&gt;
│   │&lt;br /&gt;
│   ├── Api/&lt;br /&gt;
│   │   └── RestRoutes.php       # Definizione di una rotta REST API&lt;br /&gt;
│   │&lt;br /&gt;
│   └── Ajax/&lt;br /&gt;
│       └── AjaxHandler.php      # Gestione delle chiamate AJAX&lt;br /&gt;
│&lt;br /&gt;
├── assets/&lt;br /&gt;
│   ├── css/&lt;br /&gt;
│   ├── js/&lt;br /&gt;
│   └── images/&lt;br /&gt;
│&lt;br /&gt;
└── templates/&lt;br /&gt;
    └── admin-settings.php       # HTML della pagina di impostazioni admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOGICA DEL PLUGIN ==&lt;br /&gt;
&lt;br /&gt;
=== my-plugin.php – File di bootstrap ===&lt;br /&gt;
&lt;br /&gt;
Avvia il plugin caricando la classe Plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once plugin_dir_path(__FILE__) . &#039;includes/Core/Plugin.php&#039;;&lt;br /&gt;
&lt;br /&gt;
function run_my_plugin() {&lt;br /&gt;
    $plugin = new MyPlugin\Core\Plugin();&lt;br /&gt;
    $plugin-&amp;gt;run();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
run_my_plugin();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugin.php – Punto di ingresso OOP ===&lt;br /&gt;
&lt;br /&gt;
Crea una nuova istanza del Loader, che inizializza tutte le funzionalità.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Plugin {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        $loader = new Loader();&lt;br /&gt;
        $loader-&amp;gt;init();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>151.81.60.81</name></author>
	</entry>
</feed>