De ce plugin-urile sunt încărcate înaintea pluggables

17 ian. 2012, 18:24:46
Vizualizări: 1.42K
Voturi: 4

Fluxul de încărcare WordPress

Am obținut această imagine dintr-un e-book despre dezvoltarea de plugin-uri WordPress. Poți să-mi explici de ce Plugin-urile sunt încărcate înaintea Pluggables?

1
Comentarii

Vă rugăm să urmăriți licența. Fiecare conținut de aici este licențiat GNU GPL. Dacă imaginea nu este, vă rugăm să o eliminați și să o înlocuiți cu una proprie. Altfel, cerul ar putea cădea pe capul tău.

kaiser kaiser
17 ian. 2012 20:15:51
Toate răspunsurile la întrebare 2
5

Direct din sursă pentru pluggable.php:

<?php
/**
 * Aceste funcții pot fi înlocuite prin intermediul plugin-urilor. Dacă plugin-urile nu redefinesc aceste
 * funcții, atunci acestea vor fi folosite în schimb.
 *
 * @package WordPress
 */
?>

Deci, iată răspunsul, funcțiile din pluggable.php sunt destinate a fi suprascrise de Plugin-uri.

Referitor la ordinea de încărcare:

Vezi acest articol de Konstantin Kovshenin. Punctele relevante (10-15):

  1. wp_get_active_and_valid_plugins() preia lista tuturor fișierelor plugin active pentru încărcare și le include. Acesta este punctul în care codul plugin-ului tău este executat, funcțiile, clasele definite, etc.
  2. Include wp-includes/wp-pluggable.php și wp-includes/wp-pluggable-deprecated.php care includ funcții (și funcții învechite) care pot fi redefinite de plugin-uri. Cum ar fi wp_mail() pentru trimiterea avansată de mailuri, wp_authenticate() pentru metode alternative de autentificare, etc.
  3. wp_set_internal_encoding() este apelată pentru a seta codarea internă conform opțiunii blog_charset.
  4. wp_cache_postload() este apelată dacă caching-ul pe obiecte este activat.
  5. În acest moment este declanșată o acțiune plugins_loaded. Aceasta este prima acțiune (după muplugins_loaded declanșată înainte de încărcarea plugin-urilor WordPress non-multi-site) în care te poți conecta, vine înainte de init deoarece WordPress nu a fost inițializat încă, cel puțin nu în totalitate.

Deci, simplificat:

  1. Plugin-urile sunt încărcate
  2. pluggable.php este încărcat
  3. Acțiunea plugins_loaded este declanșată

Care este ordinea așteptată.

(Notă: toate acestea au loc în wp-settings.php.)

17 ian. 2012 18:40:19
Comentarii

Îndoiala este, după cum ai spus, dacă funcțiile din pluggable.php sunt suprascrise de plugin, înseamnă că pluggable.php ar fi trebuit să fie încărcat înaintea plugin-urilor. Dar diagrama din link arată ordinea inversă.

A.C.Balaji A.C.Balaji
17 ian. 2012 18:48:08

Ordinea are loc conform așteptărilor. Vezi răspunsul actualizat.

Chip Bennett Chip Bennett
17 ian. 2012 19:12:40

Fiecare definiție de funcție în pluggables este precedată de o verificare if(!function_exists('{function name}') {. WordPress verifică dacă ai definit manual oricare dintre aceste funcții în propriile tale plugin-uri înainte de a le defini el însuși.

EAMann EAMann
17 ian. 2012 19:32:37

@EAMann Mulțumesc EAMann, acum sunt foarte clar în legătură cu întrebarea mea. De exemplu, dacă plugin-ul definește funcția wp_set_current_user, atunci în pluggable.php, wp_set_current_user nu va fi definită ca if ( !function_exists('wp_set_current_user') ) :, Am dreptate?

A.C.Balaji A.C.Balaji
17 ian. 2012 19:48:12

Ai dreptate. Dacă definești funcția în propriul tău plugin, WordPress va folosi versiunea ta în loc de cea din pluggables.php.

EAMann EAMann
17 ian. 2012 20:29:56
0

Nu folosiți funcții pluggable!

Vă rugăm să rețineți că nu puteți fi niciodată siguri că un plugin ulterior nu vă va suprascrie funcțiile pluggable! Am scris despre acest lucru pe lista de discuții wp-hackers acum ceva timp.

Există și un alt thread pe wp-hackers care discută despre faptul că nu există o rezervă implementată. Vă rugăm să citiți și tichetul related trac.

17 ian. 2012 20:21:18