Plugin custom Action Hook non funzionante
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;
}
?>
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.

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

@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.

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

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.
