Modalitatea corectă de a modifica un plugin
Care este cea mai bună modalitate de a modifica un plugin? Frecvent doresc să fac modificări mici la una sau două funcții dintr-un plugin mai mare. Acest lucru se poate face ușor, dar trebuie să folosesc comentarii pentru a marca modificările și să modific pluginul din nou după o actualizare. În mod ideal, aș dori să las pluginul neatins și să fac modificările în altă parte, similar cu ceea ce facem cu temele și temele copil. Pot să creez un plugin care să necesite pluginul părinte și să îl suprascrie?

Modul "corect" depinde evident de plugin. Unele plugin-uri sunt mai ușor de editat decât altele, dar majoritatea plugin-urilor pot fi de fmodificate prin alte plugin-uri.
De exemplu, dacă un plugin are o funcție conectată la WordPress printr-o acțiune, atunci este simplu să creezi un alt plugin care să dezactiveze acea funcție cu remove_action
, și apoi să adaugi funcția ta înlocuitoare. Această metodă îți permite să înlocuiești funcții individuale din plugin-uri cu versiunile tale modificate, fără a modifica plugin-ul original.
Același concept funcționează evident și cu filtrele.

DPMDV, cea mai bună abordare este fie să fork-uiți Plugin-ul pentru a vă menține modificările, fie să trimiteți patch-uri către dezvoltatorul Plugin-ului, pentru a avea modificările dvs. incluse în Plugin-ul original.
Crearea unui „Plugin Copil” nu este deloc ușoară. Conceptul de „Temă Copil” se aplică mai degrabă fișierelor de șabloane care sunt utilizate, mai mult decât funcțiilor Temelor (și, de fapt, fișierul functions.php
din ambele, Părinte și Copil, sunt încărcate, ceea ce poate cauza probleme pentru fișierele functions.php
care nu sunt codate corect în Tema Copil sau Părinte).

Tipurile de modificări pe care le fac sunt specifice site-ului și nu cred că bifurcarea sau trimiterea de patch-uri ar fi potrivite. Cu siguranță le voi ține minte pentru îmbunătățiri mai generale ale plugin-urilor.

Cea mai bună metodă ar fi să îl clonezi și să schimbi Numele Pluginului în header și să modifici numele directorului. În acest fel, poți păstra și versiunea originală instalată, dar neactivată, astfel încât să primești în continuare alerte atunci când sunt lansate actualizări.
<?php
/*
Plugin Name: Numele Pluginului
Plugin URI: http://URI_Pagina_Descriere_Plugin_Actualizari
Description: O scurtă descriere a Pluginului.
Version: Numărul versiunii Pluginului, de exemplu: 1.0
Author: Numele Autorului Pluginului
Author URI: http://URI_Autor_Plugin
License: Un "Slug" pentru licență, de exemplu GPL2
*/
?>

Aceasta încă necesită parcurgerea noilor versiuni ale pluginului pentru a găsi modificările (presupun că un instrument de comparare a versiunilor ar ajuta) și apoi copierea acestor modificări în pluginul meu personalizat.
Presupun că aș putea descărca pluginul și folosi SVN pentru a îmbina modificările cu versiunea mea personalizată.

Există o legătură directă către fișierul diff în jurnalul de dezvoltare de pe pagina pluginurilor. De exemplu, aici este diff generat din W3 Total Cache

Acest lucru este relativ ușor dacă plugin-ul este sub controlul sursei Git datorită naturii distribuite a Git, dar multe plugin-uri WordPress (și toate cele din depozitul oficial) sunt în Subversion. Eu folosesc ramuri de furnizor și svn_load_dirs.php dacă chiar trebuie să modific un plugin, dar acest lucru necesită un nivel destul de ridicat de confort cu Subversion.
Dacă plugin-ul nu expune niciun depozit, aș recomanda să-l transformi singur într-un depozit Git și să aplici manual versiunile noi.
În final, sistemele de control al versiunilor sunt singura modalitate rezonabilă de a reaplica modificări la versiunile noi din upstream.

Sunt de acord cu răspunsul lui Annika Backstrom, dar aș dori să îmi împărtășesc soluția preferată.
Deoarece majoritatea plugin-urilor sunt în svn, folosesc o unealtă numită git-svn pentru a crea o oglindă git.
Apoi, pur și simplu creez o ramură și îmi comit modificările acolo.
Când plugin-ul este actualizat upstream, pur și simplu trag din repository-ul svn și fac merge în ramura mea personalizată.

Deoarece nu a fost menționat, poți înlocui orice funcție care a fost făcută pluggable. Funcțiile pluggable arată astfel:
if (! function_exists('function_name')) {
function function_name() {
//...
}
}
Apoi poți pur și simplu să redefinesti funcția singur (în functions.php, Code Snippets sau în propriul tău plugin).
Din păcate, majoritatea plugin-urilor nu își fac funcțiile pluggable; sau, în cel mai bun caz, doar unele dintre funcțiile lor sunt pluggable.

Vrei să spui că poți înlocui o anumită funcție din plugin cu una personalizată și tot să primești actualizări pentru plugin?
