De ce plugin-urile sunt încărcate înaintea pluggables
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):
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.- Include
wp-includes/wp-pluggable.php
șiwp-includes/wp-pluggable-deprecated.php
care includ funcții (și funcții învechite) care pot fi redefinite de plugin-uri. Cum ar fiwp_mail()
pentru trimiterea avansată de mailuri,wp_authenticate()
pentru metode alternative de autentificare, etc.wp_set_internal_encoding()
este apelată pentru a seta codarea internă conform opțiunii blog_charset.wp_cache_postload()
este apelată dacă caching-ul pe obiecte este activat.- Î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:
- Plugin-urile sunt încărcate
pluggable.php
este încărcat- Acțiunea
plugins_loaded
este declanșată
Care este ordinea așteptată.
(Notă: toate acestea au loc în wp-settings.php
.)

Î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ă.

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 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?

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.
