Domanda

Sono stato a guardare il plugin API un po 'più in profondità di recente e mi chiedevo quali differenze vero e proprio ci sono stati tra l'azione e ganci di filtro . Entrambi sono eventi che ricevono i dati come parametro e sembrano essere entrambi in grado di fare le stesse cose.

Ovviamente vedo che le azioni vengono chiamati quando le azioni si svolgono e filtri vengono chiamati quando i dati vengono manipolati, ma sembra essere solo una differenza di denominazione semantica.

Oltre la semantica e ciò che essi sono utilizzati per, quali differenze reale ci sono tra di loro?

È stato utile?

Soluzione

Ciao @Sruly :

Hai praticamente risposto alla tua domanda, ma io elaborare un po '.

Azione Ganci

azioni Ganci sono stato progettato per essere nucleo di WordPress o qualche plugin o tema che si sta dando l'opportunità di inserire il prefisso ad un certo punto ed eseguire una o più delle seguenti condizioni:

  1. Usa echo a iniettare un po 'HTML o altri contenuti nel buffer di risposta,
  2. Modifica stato variabile globale per una o più variabili, e / o
  3. modificare i parametri passato alla funzione di gancio (assumendo che il gancio è stato chiamato da do_action_ref_array() anziché do_action() quanto quest'ultimo non supporta variabili passano di riferimento .)

Filtro Ganci

Filtro Ganci si comportano molto simile a Azione Ganci , ma la loro destinazione d'uso è di ricevere un valore e potenzialmente restituire una versione modificata del valore. Un gancio di filtro potrebbe essere utilizzato anche come un'azione Hook vale a dire per modificare una variabile globale o di generare qualche HTML, partendo dal presupposto che è quello che devi fare quando il gancio è chiamato. Una cosa che è molto importante su Filtro Hooks che non è necessario preoccuparsi di Azione Ganci è che la persona che utilizza un filtro Hook deve di ritorno (una versione modificata di ) il primo parametro è stato passato. Un errore comune newbie è quello di dimenticare di restituire quel valore!

Utilizzo di parametri aggiuntivi per fornire un contesto nel filtro Ganci

Per inciso Ho sentito che Filtro Ganci sono stati zoppicando nelle versioni precedenti di WordPress, perché avrebbero ricevuto un solo parametro; cioè si otterrebbe un valore per modificare, ma senza parametri 2 o 3 per fornire qualsiasi contesto. Ultimamente, e positivamente Tuttavia, sembra che il core team di WordPress ha gioiosamente (per me) stata l'aggiunta di parametri aggiuntivi per il filtraggio dei ganci in modo da poter scoprire di più contesto. Un buon esempio è il gancio posts_where; Credo che alcune versioni indietro ha accettato un solo parametro di essere della query corrente "dove" di classe SQL ma ora accetta sia la clausola where e un riferimento all'istanza corrente della classe WP_Query che sta richiamando il gancio.

Allora, qual è la differenza reale?

In realtà filtro Ganci sono praticamente un superset di Azione Ganci. Il primo può fare nulla quest'ultimo può fare e un po 'di più anche se lo sviluppatore non ha la responsabilità di restituire un valore con il gancio d'azione che lui o lei fa con il filtro Hook.

Dare orientamento e di telegrafare intenti

Ma questo è probabilmente non ciò che è importante. Penso che ciò che è importante è che da uno sviluppatore la scelta di utilizzare un gancio d'azione rispetto a un gancio Filtro o viceversa sono telegrafare loro intento e quindi dare indicazioni per la themer o plug-sviluppatore che potrebbero utilizzare il gancio. In sostanza dicono sia "Vado a chiamare te, fai quello che devi fare" o "I' ve intenzione di passare questo valore da modificare, ma essere sicuri che si passa indietro ."

Quindi, in ultima analisi, Credo che indicazioni fornite dalla scelta del tipo di gancio è il valore reale dietro la distinzione . IMO, in ogni caso.

Spero che questo aiuti!

Altri suggerimenti

Se si guarda alla fonte per la funzione principale add_action(), è solo un wrapper per la funzione add_filter() ...

E se si guarda la funzione principale do_action(), è molto simile alla funzione di base apply_filters(), con una differenza molto chiave:. Non restituisce un valore

Che cosa significa questo? le azioni sono come filtri, ad eccezione di un'azione non restituisce un valore, quindi non è possibile modificare i dati. Ciò dimostra che è stato semplice per creare il meccanismo d'azione di WordPress' semplicemente copiando il meccanismo di filtro, e non restituire un valore. In pratica, tutto quello che può fare con l'azione è semplicemente eseguire una funzione senza modificare qualche valore.

In semplice di parola.

Azioni sono quelle funzioni PHP che eseguono l'uscita.

Filtri sono quelle funzioni PHP che restituiscono l'uscita.

Aggiornamento: Possiamo estendere alcun plugin che utilizzano le azioni e filtri senza modificare il codice lì. Con l'aggiunta di filtri e le azioni nel nostro tema o plug-in.


Come utilizzare?

Azione:

Controlla qui sotto semplici esempi nel file tema functions.php.

  1. Un Esempio: (ad esempio PHP semplice)
function test() {
     echo "Output";
}

test();

Programma Sopra stampare l'output:

Output

[Nota: Qui test () semplicemente chiamare la funzione. Ed eseguire la funzione di callback 'test'.]


  1. Esempio due: (uso semplice di Azione)
function test1() {
     echo "Output";
}
add_action( 'test', 'test1' );

do_action( 'test' );

Programma Sopra stampare l'output:

Output

[NOTA: qui Opere do_action('test') come funzione di chiamata. Ed eseguire la funzione di callback 'test1'.]


  1. Esempio Tre: (Un altro uso di azioni)
function test2() {
     echo "Test 2";
}
add_action( 'test', 'test2', 1 );

function test1() {
     echo "Test 1";
}
add_action( 'test', 'test1', 2 );

do_action( 'test' );

Programma Sopra stampare l'output:

Test 2Test 1

[NOTA: qui Opere do_action('test') come funzione di chiamata. Ed eseguire le funzioni di callback su di essa la priorità.

Callback funzione 'test1' ha la priorità 2 E 'test2' ha la priorità 1.]

Se le priorità sono il cambiamento come 'test1' con priorità 1 E 'test2' con priorità 2 uscita allora sarà:

Test 1Test 2

  1. Esempio Quattro: (supporto 3a parte) Aggiungere sottostante Codice in functions.php
function test1() {
     do_action( 'test_before' );
     echo "Test 1";
     do_action( 'test_after' );
}
add_action( 'test', 'test1' );

do_action( 'test' );

Programma Sopra stampare l'output:

Test 1

Ora, creare plug-in di esempio per verificare come funziona per 3a parte dello sviluppatore.

  1. Crea cartella 'semplice' nella directory /wp-content/plugins/.
  2. Crea file chiamato 'simple.php' e aggiungere sotto il codice.
/*
* Plugin Name: Simple Plugin
*/
function test_callback_function() {
     echo "From plugin";
}
add_action( 'test', 'test_callback_function' );

Ora, attivare la nostra semplice plugin da WordPress Admin Dashboard.

plug-in di menu Goto e attivarlo.

Dopo plug-Attiva sopra programma di stampare l'output:

Test 1From plugin

[NOTA: Se a questo aggiungiamo la priorità per la nostra azione plugin di 1-9 poi stampare l'output come:

From pluginTest 1

A causa, WordPress considerare la 10 priority by default per tutte le azioni aggiunti.]

Filtri

Controllare il seguito esempi:

esempio PHP semplice:

$data = array( 'one', 'two' );
print_r( $data );

Programma Sopra stampare l'output:

Array ( [0] => one [1] => two )
  1. Un Esempio: (uso semplice del filtro)
$data = apply_filters( 'my_filter_name', array( 'one', 'two' ) );
print_r( $data );

add_filter( 'my_filter_name', function( $old_data ) {
     return array( 'three', 'four' );
});

Programma Sopra stampare l'output:

Array ( [0] => three [1] => four )

my_filter_name filtro Qui, abbiamo aggiunto e cambiare il array( 'one', 'two' ) uscita esistente con array( 'three', 'four' ) senza cambiare il tema / plugin file.


Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top