perché i plugin vengono caricati prima delle funzioni pluggable

17 gen 2012, 18:24:46
Visualizzazioni: 1.42K
Voti: 4

Flusso di caricamento URL in WordPress

Ho ottenuto questa immagine da un e-book sullo sviluppo di plugin per WordPress. Potresti chiarirmi perché i Plugin vengono caricati prima delle Pluggables?

1
Commenti

Per favore, controlla la licenza. Tutti i contenuti qui presenti sono concessi in licenza GNU GPL. Se l'immagine non lo è, rimuovila e sostituiscila con una tua. Altrimenti il cielo potrebbe crollarti sulla testa.

kaiser kaiser
17 gen 2012 20:15:51
Tutte le risposte alla domanda 2
5

Direttamente dal sorgente per pluggable.php:

<?php
/**
 * Queste funzioni possono essere sostituite tramite plugin. Se i plugin non ridefiniscono queste
 * funzioni, allora verranno utilizzate queste.
 *
 * @package WordPress
 */
?>

Quindi, ecco la tua risposta, le funzioni in pluggable.php sono progettate per essere sovrascritte dai Plugin.

Riguardo all'ordine di caricamento:

Vedi questo post di Konstantin Kovshenin. I punti rilevanti (10-15):

  1. wp_get_active_and_valid_plugins() recupera l'elenco di tutti i file dei plugin attivi per il caricamento e li include. Questo è il punto in cui il codice del tuo plugin viene eseguito, vengono definite funzioni, classi, ecc.
  2. Include wp-includes/wp-pluggable.php e wp-includes/wp-pluggable-deprecated.php che includono funzioni (e funzioni deprecate) che possono essere ridefinite dai plugin. Come wp_mail() per mailing più avanzati, wp_authenticate() per metodi di autenticazione alternativi, ecc.
  3. wp_set_internal_encoding() viene chiamato per impostare la codifica interna in base all'opzione blog_charset.
  4. wp_cache_postload() viene chiamato se la cache degli oggetti è abilitata.
  5. A questo punto viene attivata un'azione plugins_loaded. Questa è la primissima azione (dopo muplugins_loaded attivato prima del caricamento dei plugin WordPress non multi-sito) a cui puoi agganciarti, viene prima di init perché WordPress non è ancora stato inizializzato, almeno non completamente.

Quindi, semplificato:

  1. I plugin vengono caricati
  2. pluggable.php viene caricato
  3. Viene attivata l'azione plugins_loaded

Che è l'ordine previsto.

(Nota: tutto questo avviene in wp-settings.php.)

17 gen 2012 18:40:19
Commenti

Il dubbio è, come hai detto se le funzioni di pluggable.php vengono sovrascritte dal plugin significa che pluggable.php dovrebbe essere stato caricato prima dei plugin. Ma il Diagramma mostra l'ordine inverso.

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

L'ordine avviene come previsto. Vedi risposta aggiornata.

Chip Bennett Chip Bennett
17 gen 2012 19:12:40

Ogni definizione di funzione in pluggables è preceduta da un controllo if(!function_exists('{nome funzione}') {. WordPress verifica se hai definito manualmente una di queste funzioni nei tuoi plugin prima di definirle autonomamente.

EAMann EAMann
17 gen 2012 19:32:37

@EAMann Grazie EAMann, ora sono molto chiaro sulla mia domanda, ad esempio, se il plugin definisce la funzione wp_set_current_user, allora in pluggable.php, wp_set_current_user non verrà definita come if ( !function_exists('wp_set_current_user') ) :, ho ragione?

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

Hai ragione. Se definisci la funzione nel tuo plugin, WordPress utilizzerà la tua versione invece di quella in pluggables.php.

EAMann EAMann
17 gen 2012 20:29:56
0

Non utilizzare funzioni pluggable!

Nota bene che non puoi mai essere certo che un plugin successivo non sovrascriva le tue funzioni pluggable! Ho scritto su wp-hackers mailing list riguardo questo qualche tempo fa.

C'è anche un altro thread su wp-hackers che discute del fatto che non è stato implementato alcun fallback. Per favore leggi anche il ticket trac correlato.

17 gen 2012 20:21:18