Plugin custom Action Hook non funzionante

25 nov 2013, 20:27:40
Visualizzazioni: 22.1K
Voti: 2

Sto cercando di creare un plugin base dove voglio creare il mio action hook personalizzato. Ecco il codice:

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

do_action('basic_action_demo');
?>

Dopo aver attivato questo plugin, voglio utilizzare questo action hook nel file functions.php del mio tema attuale. Il codice è il seguente:

add_action('basic_action_demo','action_demo');

function action_demo()
{
    echo "Sono all'interno";
}

Il problema è che la mia action agganciata non viene mai chiamata. Possiamo vedere che do_action viene chiamato incondizionatamente quindi dovrebbe essere eseguito ad ogni caricamento della pagina, ma non entra mai nel metodo "action_demo".

Quello che ho capito finora è che il plugin viene caricato prima che il file functions.php del tema venga eseguito. Quindi qui do_action viene chiamato prima di add_action.

Un suggerimento sarebbe molto apprezzato.

Aggiornamento:

Il seguente codice del plugin funziona.

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

add_action('basic_action_demo','action_demo');
do_action('basic_action_demo');

function action_demo()
{
    echo "Sono all'interno";
    die;
}
?>
4
Commenti

L'ordine dei tuoi "do" e "add" non è corretto. Per favore, spiegaci cosa vuoi ottenere con il tuo action hook personale, in modo che possiamo aiutarti a capire dove e come devi aggiungerli.

Twifty Twifty
25 nov 2013 20:36:27

@Waldermort Bene, diciamo che ho un plugin con un semplice form. Voglio chiamare il mio action hook personale una volta che quel form viene inviato. Spero sia chiaro cosa intendo.

Avinash Avinash
25 nov 2013 20:39:07

Scusa, non è molto chiaro. Puoi chiamare il tuo hook dallo script che gestisce il form, momento in cui il core dovrebbe essere completamente caricato. Tutto dipende davvero da come crei quel codice e da come gestisci le tue variabili di query.

Twifty Twifty
25 nov 2013 20:46:39

@Waldermort Il problema che ho individuato (dalla tua risposta qui sotto) è che il file del plugin viene chiamato prima del file del tema. Hai delle linee guida specifiche su come dovrebbe essere gestito?

Avinash Avinash
25 nov 2013 20:53:01
Tutte le risposte alla domanda 1
5

Il tuo plugin deve attendere il caricamento del file functions.php del tema. Prova questo:

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

add_action( 'after_setup_theme', function() {
    do_action( 'basic_action_demo' );
} );
?>

L'hook after_setup_theme viene eseguito immediatamente dopo il caricamento di functions.php.

Aggiornamento per il tuo commento qui sotto. Nel tuo plugin crea una funzione per il tuo form:

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

function output_my_form () {
    echo "Sono un form";
    // esegui la tua azione qui
    do_action( 'basic_action_demo' );
}
?>

Poi nel functions.php del tuo tema:

if ( function_exists( 'output_my_form' ) ) {
    output_my_form();
}

Questo è un esempio semplice. Nella realtà vorrai chiamare quella funzione da un file form.php nel tuo tema.

25 nov 2013 20:40:59
Commenti

Questo funziona, ma è l'unico modo per aggiungere un hook di azione personalizzato nei file del plugin o mi sto perdendo qualcosa?

Avinash Avinash
25 nov 2013 20:48:32

@Avinash Quando vuoi che il tuo codice venga eseguito? Un plugin è fatto per essere disponibile per un tema, ecco perché vengono caricati per primi. Se vuoi eseguire codice dal tuo plugin nel tuo tema, crea semplicemente una serie di funzioni nel tuo plugin e chiamale dal tema. Se vuoi eseguire codice del tema da un plugin (non è una buona idea) allora usa l'hook di azione sopra per aspettare che il tema sia caricato e poi chiama quelle funzioni dal gestore dell'azione.

Twifty Twifty
25 nov 2013 21:00:55

Ho il mio codice di invio del form nel file del plugin e dopo ho fatto do_action('my_action') che però non funziona :(

Avinash Avinash
25 nov 2013 21:03:41

OK. Sto iniziando a capire. Non generare il tuo form quando il tuo plugin viene caricato. Crea una funzione per esso, poi chiama quella funzione dal tuo tema. Aggiornerò la mia risposta.

Twifty Twifty
25 nov 2013 21:06:04

@Avinash Ricorda di votare/accettare se pensi che la risposta sia utile :)

Twifty Twifty
25 nov 2013 21:38:58