Modo Corretto per Modificare un Plugin
Qual è il modo migliore per modificare un plugin? Spesso ho bisogno di apportare piccole modifiche a una o due funzioni all'interno di un plugin complesso. Questo è facilmente fattibile, ma devo utilizzare commenti per contrassegnare le mie modifiche e modificare nuovamente il plugin dopo un aggiornamento. Idealmente, vorrei lasciare il plugin originale intatto e fare le mie modifiche altrove, proprio come facciamo con i temi e i temi child. Posso creare un plugin che richieda il plugin principale e lo sovrascriva?

Il modo "giusto" ovviamente dipende dal plugin. Alcuni plugin sono più facili da modificare rispetto ad altri, ma la maggior parte dei plugin può effettivamente essere modificata da altri plugin.
Ad esempio, se un plugin ha una funzione agganciata a WordPress tramite un'azione, allora è semplice creare un altro plugin che rimuova quella funzione con remove_action, per poi aggiungere la propria funzione sostitutiva. Questo tipo di metodo ti permette di sostituire singole funzioni nei plugin con le tue versioni modificate, senza modificare il plugin originale.
Lo stesso concetto funziona ovviamente anche con i filtri.

IMHO, il miglior approccio è fare un fork del Plugin per mantenere le tue modifiche, oppure inviare le patch allo sviluppatore del Plugin, per includere le tue modifiche nel Plugin originale.
Creare un "Plugin figlio" non è affatto semplice. Il concetto di "Tema figlio" si applica principalmente ai file template che vengono utilizzati, più che alle funzioni del Tema (e infatti, il file functions.php
sia del Genitore che del Figlio vengono caricati, il che causa problemi per i file functions.php
scritti male sia nel Tema Figlio che in quello Genitore).

I tipi di modifiche che sto apportando sono specifici per il sito e quindi non credo che il forking o l'invio di patch sarebbe appropriato. Terrò sicuramente a mente queste opzioni per miglioramenti più generali ai plugin.

Il modo migliore sarebbe semplicemente clonarlo e modificare il Plugin Name nell'intestazione, oltre a cambiare il nome della directory. In questo modo potresti anche avere l'originale installato ma non attivato, così continuerai a ricevere avvisi quando vengono rilasciati aggiornamenti.
<?php
/*
Plugin Name: Nome Del Plugin
Plugin URI: http://URI_Della_Pagina_Che_Descrive_Il_Plugin_e_Gli_Aggiornamenti
Description: Una breve descrizione del Plugin.
Version: Numero di versione del Plugin, es: 1.0
Author: Nome Dell'Autore Del Plugin
Author URI: http://URI_Dell'Autore_Del_Plugin
License: Un "slug" per la licenza, es. GPL2
*/
?>

Questo richiede ancora di esaminare le nuove versioni del plugin per trovare le modifiche (suppongo che uno strumento di confronto tra versioni potrebbe aiutare) e poi copiare tali modifiche nel mio plugin personalizzato.
Suppongo che potrei scaricare il plugin e usare SVN per unire le modifiche con la mia versione personalizzata.

C'è un collegamento diretto al file diff nel link del registro di sviluppo nella pagina dei plugin. Ad esempio, ecco un diff generato da W3 Total Cache

Questo è relativamente semplice se il plugin è sotto controllo del codice sorgente Git grazie alla natura distribuita di Git, ma molti plugin WordPress (e tutti quelli nel repository ufficiale) sono in Subversion. Io uso vendor branches e svn_load_dirs.php se ho davvero bisogno di modificare un plugin, ma questo richiede un livello di confidenza abbastanza alto con Subversion.
Se il plugin non espone alcun repository, ti consiglierei di trasformarlo tu stesso in un repository Git e applicare manualmente le nuove versioni.
Alla fine, i sistemi di controllo versione sono l'unico modo sensato per riapplicare le modifiche alle nuove versioni upstream.

Sono d'accordo con la risposta di Annika Backstrom, ma vorrei condividere la mia soluzione preferita.
Dato che la maggior parte dei plugin sono su svn, utilizzo uno strumento chiamato git-svn per creare uno specchio git.
Poi, creo semplicemente un branch e inserisco le mie modifiche lì.
Quando il plugin viene aggiornato upstream, eseguo il pull dal repository svn e unisco nel mio branch personalizzato.

Dato che non è stato menzionato, puoi sostituire qualsiasi funzione che è stata resa "pluggable". Le funzioni pluggable hanno questo aspetto:
if (! function_exists('nome_funzione')) {
function nome_funzione() {
//...
}
}
A quel punto puoi semplicemente ridefinire la funzione da te stesso (in functions.php, con Code Snippets, o nel tuo plugin personalizzato).
Sfortunatamente, la maggior parte dei plugin non rende le proprie funzioni pluggable; o al massimo, solo alcune delle loro funzioni sono pluggable.

Vuoi dire che puoi sovrascrivere una specifica funzione nel plugin con una funzione personalizzata, e continuare a ricevere aggiornamenti per il plugin?
