<?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=Zohro</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=Zohro"/>
	<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Speciale:Contributi/Zohro"/>
	<updated>2026-04-17T17:54:05Z</updated>
	<subtitle>Contributi dell&amp;#039;utente</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=PROXMOX&amp;diff=30</id>
		<title>PROXMOX</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=PROXMOX&amp;diff=30"/>
		<updated>2026-01-09T11:22:09Z</updated>

		<summary type="html">&lt;p&gt;Zohro: Creata pagina con &amp;quot;== TIPS ==  === Container non si avvio per Card non trovata ===  * Da nodo Proxmox controllare in &amp;lt;code&amp;gt;ls -la /dev/dri&amp;lt;/code&amp;gt; * Poi entrare nella configurazione del container che non si avvia e cercare che CARD ha associato * possibilità comuni: &amp;lt;code&amp;gt;card0, card1,renderD128&amp;lt;/code&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TIPS ==&lt;br /&gt;
&lt;br /&gt;
=== Container non si avvio per Card non trovata ===&lt;br /&gt;
&lt;br /&gt;
* Da nodo Proxmox controllare in &amp;lt;code&amp;gt;ls -la /dev/dri&amp;lt;/code&amp;gt;&lt;br /&gt;
* Poi entrare nella configurazione del container che non si avvia e cercare che CARD ha associato&lt;br /&gt;
* possibilità comuni: &amp;lt;code&amp;gt;card0, card1,renderD128&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=29</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=29"/>
		<updated>2026-01-09T11:17:42Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Server ==&lt;br /&gt;
* [[PROXMOX]]&lt;br /&gt;
&lt;br /&gt;
== Sviluppo ==&lt;br /&gt;
* [[Wordpress]]&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
*[[Cubo di Rubik]]&lt;br /&gt;
&lt;br /&gt;
Consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents guida utente] per maggiori informazioni sull&#039;uso di questo software wiki.&lt;br /&gt;
&lt;br /&gt;
== Per iniziare ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impostazioni di configurazione]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti su MediaWiki]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Mailing list annunci MediaWiki]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Trova MediaWiki nella tua lingua]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Imparare a combattere lo spam sul tuo wiki]&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Cubo_di_Rubik&amp;diff=27</id>
		<title>Cubo di Rubik</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Cubo_di_Rubik&amp;diff=27"/>
		<updated>2025-08-16T16:24:04Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* Istruzione Cubo classico 3x3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Istruzione Cubo classico 3x3 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ MOSSE&lt;br /&gt;
|-&lt;br /&gt;
! Movimento !! Info&lt;br /&gt;
|-&lt;br /&gt;
| a mano|| a mano deve uscire croce fino al centro(2° strato)&lt;br /&gt;
|-&lt;br /&gt;
| R U R&#039; U&#039;|| Secondo strato sexy move &lt;br /&gt;
|-&lt;br /&gt;
| U R U&#039; R&#039; U&#039; F&#039; U F|| Secondo strato scambio spigoli dx (con T rov.) bianco sotto&lt;br /&gt;
|-&lt;br /&gt;
| U&#039; L&#039; U L U F U&#039; F&#039;|| Secondo strato scambio spigoli sx (con T rov.)&lt;br /&gt;
|-&lt;br /&gt;
| F R U R&#039; U&#039; F&#039;|| Terzo strato croce (Prima solo punto giallo al centro poi una L poi riga centrale poi croce) &lt;br /&gt;
|-&lt;br /&gt;
| R U R&#039; U R UU R&#039;|| Terzo strato spigoli croce (spigoli ok -&amp;gt; up-down -&amp;gt; up-right) &lt;br /&gt;
|-&lt;br /&gt;
| R U&#039; L&#039; U R&#039; U&#039; L U || Terzo strato scambio 3 angoli (bianco sotto, giallo sopra) (angolo buono in alto as sx) &lt;br /&gt;
|-&lt;br /&gt;
| Sexy Move || bianco in alto, angolo da cambiare in basso a dx, senza più cambiare la faccia giro lo strato in basso per riapplicare la sexy move&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Cubo_di_Rubik&amp;diff=26</id>
		<title>Cubo di Rubik</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Cubo_di_Rubik&amp;diff=26"/>
		<updated>2025-08-16T16:21:18Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* Istruzione Cubo classico 3x3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Istruzione Cubo classico 3x3 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ MOSSE&lt;br /&gt;
|-&lt;br /&gt;
! Movimento !! Risultato&lt;br /&gt;
|-&lt;br /&gt;
| a mano|| a mano deve uscire croce fino al centro(2° strato)&lt;br /&gt;
|-&lt;br /&gt;
| R U R&#039; U&#039;|| Secondo strato sexy move &lt;br /&gt;
|-&lt;br /&gt;
| Example || Example &lt;br /&gt;
|-&lt;br /&gt;
| Example || Example &lt;br /&gt;
|-&lt;br /&gt;
| Example || Example &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Cubo_di_Rubik&amp;diff=25</id>
		<title>Cubo di Rubik</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Cubo_di_Rubik&amp;diff=25"/>
		<updated>2025-08-16T16:19:44Z</updated>

		<summary type="html">&lt;p&gt;Zohro: Creata pagina con &amp;quot;== Istruzione Cubo classico 3x3 ==  {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot; |+ MOSSE |- ! Header text !! Header text  |- | Example || Example  |- | Example || Example  |- | Example || Example  |}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Istruzione Cubo classico 3x3 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ MOSSE&lt;br /&gt;
|-&lt;br /&gt;
! Header text !! Header text &lt;br /&gt;
|-&lt;br /&gt;
| Example || Example &lt;br /&gt;
|-&lt;br /&gt;
| Example || Example &lt;br /&gt;
|-&lt;br /&gt;
| Example || Example &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=24</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=24"/>
		<updated>2025-08-16T16:16:59Z</updated>

		<summary type="html">&lt;p&gt;Zohro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sviluppo ==&lt;br /&gt;
* [[Wordpress]]&lt;br /&gt;
&lt;br /&gt;
== Altro ==&lt;br /&gt;
*[[Cubo di Rubik]]&lt;br /&gt;
&lt;br /&gt;
Consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents guida utente] per maggiori informazioni sull&#039;uso di questo software wiki.&lt;br /&gt;
&lt;br /&gt;
== Per iniziare ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impostazioni di configurazione]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti su MediaWiki]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Mailing list annunci MediaWiki]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Trova MediaWiki nella tua lingua]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Imparare a combattere lo spam sul tuo wiki]&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=23</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=23"/>
		<updated>2025-08-15T15:00:49Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* my-plugin.php – File di bootstrap */&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;
File principale.&lt;br /&gt;
* Avvia il plugin &lt;br /&gt;
* Caricando la classe Plugin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defined(&#039;ABSPATH&#039;) || exit;&lt;br /&gt;
&lt;br /&gt;
// Autoload minimale per le classi del namespace MyCity\&lt;br /&gt;
spl_autoload_register(function ($class) {&lt;br /&gt;
    // Considera solo le classi del tuo namespace&lt;br /&gt;
    if (strpos($class, &#039;MyPlugin\\&#039;) !== 0) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Converte il namespace in percorso file dentro /includes&lt;br /&gt;
    $relative = str_replace([&#039;MyPlugin\\&#039;, &#039;\\&#039;], [&#039;&#039;, &#039;/&#039;], $class) . &#039;.php&#039;;&lt;br /&gt;
    $path = plugin_dir_path(__FILE__) . &#039;includes/&#039; . $relative;&lt;br /&gt;
&lt;br /&gt;
    if (file_exists($path)) {&lt;br /&gt;
        require_once $path;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Avvio del plugin quando WP ha caricato i plugin&lt;br /&gt;
add_action(&#039;plugins_loaded&#039;, function () {&lt;br /&gt;
    // Ora l&#039;autoloader è attivo: non serve richiedere Plugin.php a mano&lt;br /&gt;
    $plugin = new \MyPlugin\Core\Plugin();&lt;br /&gt;
    $plugin-&amp;gt;run();&lt;br /&gt;
});&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;
namespace MyPlugin\Core;&lt;br /&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loader.php –  ===&lt;br /&gt;
&lt;br /&gt;
Gestione hook e azioni.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
namespace MyPlugin\Core;&lt;br /&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;
=== 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>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=22</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=22"/>
		<updated>2025-08-14T07:41:59Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* Loader.php – Inizializzazione dei moduli */&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;
File principale.&lt;br /&gt;
* Avvia il plugin &lt;br /&gt;
* Caricando la classe Plugin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defined(&#039;ABSPATH&#039;) || exit;&lt;br /&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;
namespace MyPlugin\Core;&lt;br /&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loader.php –  ===&lt;br /&gt;
&lt;br /&gt;
Gestione hook e azioni.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
namespace MyPlugin\Core;&lt;br /&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;
=== 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>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=21</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=21"/>
		<updated>2025-08-14T07:41:02Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* my-plugin.php – File di bootstrap */&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;
File principale.&lt;br /&gt;
* Avvia il plugin &lt;br /&gt;
* Caricando la classe Plugin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defined(&#039;ABSPATH&#039;) || exit;&lt;br /&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;
namespace MyPlugin\Core;&lt;br /&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;
&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>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=20</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=20"/>
		<updated>2025-08-14T07:40:17Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* Plugin.php – Punto di ingresso OOP */&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;
File principale.&lt;br /&gt;
* Avvia il plugin &lt;br /&gt;
* 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;
namespace MyPlugin\Core;&lt;br /&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;
&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>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=19</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=19"/>
		<updated>2025-08-14T07:39:03Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* my-plugin.php – File di bootstrap */&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;
File principale.&lt;br /&gt;
* Avvia il plugin &lt;br /&gt;
* 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>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=PHP&amp;diff=18</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=PHP&amp;diff=18"/>
		<updated>2025-08-13T14:38:06Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* php.ini */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== php.ini ==&lt;br /&gt;
&lt;br /&gt;
Percorso del file php.ini -&amp;gt; &amp;lt;code&amp;gt;/usr/local/etc/php/conf.d/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modificare le impostazioni di default:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Numero massimo di variabili di input (GET/POST/COOKIE)&lt;br /&gt;
max_input_vars = 12000&lt;br /&gt;
&lt;br /&gt;
; Tempo massimo di esecuzione di uno script PHP (in secondi)&lt;br /&gt;
max_execution_time = 180&lt;br /&gt;
&lt;br /&gt;
; Limite di memoria per uno script PHP&lt;br /&gt;
memory_limit = 1024M&lt;br /&gt;
&lt;br /&gt;
; Tempo massimo di parsing degli input (in secondi)&lt;br /&gt;
max_input_time = 60&lt;br /&gt;
&lt;br /&gt;
; Dimensione massima per un file caricato&lt;br /&gt;
upload_max_filesize = 150M&lt;br /&gt;
&lt;br /&gt;
; Dimensione massima dell&#039;intero corpo POST (influisce anche sugli upload)&lt;br /&gt;
post_max_size = 150M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=PHP&amp;diff=17</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=PHP&amp;diff=17"/>
		<updated>2025-08-13T14:37:09Z</updated>

		<summary type="html">&lt;p&gt;Zohro: Creata pagina con &amp;quot;== php.ini ==  Modificare le impostazioni di default: &amp;lt;pre&amp;gt; ; Numero massimo di variabili di input (GET/POST/COOKIE) max_input_vars = 12000  ; Tempo massimo di esecuzione di uno script PHP (in secondi) max_execution_time = 180  ; Limite di memoria per uno script PHP memory_limit = 1024M  ; Tempo massimo di parsing degli input (in secondi) max_input_time = 60  ; Dimensione massima per un file caricato upload_max_filesize = 150M  ; Dimensione massima dell&amp;#039;intero corpo POST...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== php.ini ==&lt;br /&gt;
&lt;br /&gt;
Modificare le impostazioni di default:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Numero massimo di variabili di input (GET/POST/COOKIE)&lt;br /&gt;
max_input_vars = 12000&lt;br /&gt;
&lt;br /&gt;
; Tempo massimo di esecuzione di uno script PHP (in secondi)&lt;br /&gt;
max_execution_time = 180&lt;br /&gt;
&lt;br /&gt;
; Limite di memoria per uno script PHP&lt;br /&gt;
memory_limit = 1024M&lt;br /&gt;
&lt;br /&gt;
; Tempo massimo di parsing degli input (in secondi)&lt;br /&gt;
max_input_time = 60&lt;br /&gt;
&lt;br /&gt;
; Dimensione massima per un file caricato&lt;br /&gt;
upload_max_filesize = 150M&lt;br /&gt;
&lt;br /&gt;
; Dimensione massima dell&#039;intero corpo POST (influisce anche sugli upload)&lt;br /&gt;
post_max_size = 150M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Wordpress&amp;diff=16</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Wordpress&amp;diff=16"/>
		<updated>2025-08-13T14:36:21Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* Notizie e Info */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Notizie e Info ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Plugin base]]&lt;br /&gt;
* [[Tips]]&lt;br /&gt;
* [[Query utili]]&lt;br /&gt;
* [[PHP]]&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=9</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=9"/>
		<updated>2025-08-13T11:41:17Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* my-plugin.php – File di bootstrap */&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;
&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;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=8</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=8"/>
		<updated>2025-08-13T11:24:46Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* 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;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&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;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=7</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=7"/>
		<updated>2025-08-13T11:24:01Z</updated>

		<summary type="html">&lt;p&gt;Zohro: &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;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=6</id>
		<title>Plugin base</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Plugin_base&amp;diff=6"/>
		<updated>2025-08-13T11:21:26Z</updated>

		<summary type="html">&lt;p&gt;Zohro: Creata pagina con &amp;quot;Struttura modulare, basata su classi, con il supporto integrato per REST API e AJAX.  &amp;lt;pre&amp;gt; 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 │   │ │   ├─...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Wordpress&amp;diff=5</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Wordpress&amp;diff=5"/>
		<updated>2025-08-13T11:19:57Z</updated>

		<summary type="html">&lt;p&gt;Zohro: /* Notizie e Info */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Notizie e Info ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Plugin base]]&lt;br /&gt;
* [[Tips]]&lt;br /&gt;
* [[Query utili]]&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Wordpress&amp;diff=4</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Wordpress&amp;diff=4"/>
		<updated>2025-08-13T11:19:24Z</updated>

		<summary type="html">&lt;p&gt;Zohro: Creata pagina con &amp;quot;== Notizie e Info ==   * Plugin base&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Notizie e Info ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Plugin base]]&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=3</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=3"/>
		<updated>2025-08-13T11:18:06Z</updated>

		<summary type="html">&lt;p&gt;Zohro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Wordpress]]&lt;br /&gt;
&lt;br /&gt;
Consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents guida utente] per maggiori informazioni sull&#039;uso di questo software wiki.&lt;br /&gt;
&lt;br /&gt;
== Per iniziare ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impostazioni di configurazione]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti su MediaWiki]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Mailing list annunci MediaWiki]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Trova MediaWiki nella tua lingua]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Imparare a combattere lo spam sul tuo wiki]&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
	<entry>
		<id>https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=2</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="https://wiki.marcocerutti.it/index.php?title=Pagina_principale&amp;diff=2"/>
		<updated>2025-08-13T11:17:54Z</updated>

		<summary type="html">&lt;p&gt;Zohro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Wordpress&lt;br /&gt;
&lt;br /&gt;
Consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents guida utente] per maggiori informazioni sull&#039;uso di questo software wiki.&lt;br /&gt;
&lt;br /&gt;
== Per iniziare ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impostazioni di configurazione]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti su MediaWiki]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Mailing list annunci MediaWiki]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Trova MediaWiki nella tua lingua]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Imparare a combattere lo spam sul tuo wiki]&lt;/div&gt;</summary>
		<author><name>Zohro</name></author>
	</entry>
</feed>