Hook-ul personalizat de acțiune din plugin nu funcționează
Încerc să creez un plugin simplu în care vreau să creez propriul hook de acțiune. Iată codul pentru acesta.
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
do_action('basic_action_demo');
?>
După activarea acestui plugin, vreau să folosesc acest hook de acțiune în fișierul functions.php al temei mele curente. Codul pentru aceasta este următorul:
add_action('basic_action_demo','action_demo');
function action_demo()
{
echo "Sunt înăuntru";
}
Problema este că acțiunea mea hook-uită nu este niciodată apelată. Putem vedea că do_action este apelat necondiționat, deci va fi apelat la fiecare încărcare de pagină, dar nu ajunge niciodată în metoda "action_demo".
Din ce am descoperit până acum, plugin-ul este încărcat înainte ca fișierul functions.php al temei mele să fie executat. Astfel, aici do_action este apelat primul și apoi add_action.
Un indiciu ar fi foarte apreciat.
Actualizare:
Acțiunea plugin-ului de mai jos funcționează.
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
add_action('basic_action_demo','action_demo');
do_action('basic_action_demo');
function action_demo()
{
echo "Sunt Înăuntru";
die;
}
?>
Pluginul tău trebuie să aștepte încărcarea fișierului functions.php
al temei. Încearcă asta:
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
add_action( 'after_setup_theme', function() {
do_action( 'basic_action_demo' );
} );
?>
Action hook-ul after_setup_theme
este executat imediat după încărcarea fișierului functions.php
.
Actualizare conform comentariului tău de mai jos. În pluginul tău, creează o funcție pentru formular:
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
function output_my_form () {
echo "Sunt un formular";
// efectuează acțiunea aici
do_action( 'basic_action_demo' );
}
?>
Apoi, în functions.php
al temei tale:
if ( function_exists( 'output_my_form' ) ) {
output_my_form();
}
Acesta este un exemplu simplu. În realitate, ai vrea să apelezi acea funcție dintr-un fișier form.php
al temei tale.

Aceasta funcționează, dar este singura modalitate de a adăuga propriul action hook în fișierele plugin-ului sau omit ceva?

@Avinash Când dorești să ruleze codul tău? Un plugin este creat pentru a fi disponibil unui tema, de aceea acestea sunt încărcate primele. Dacă vrei să rulezi cod din plugin-ul tău din tema ta, atunci pur și simplu creează un set de funcții în plugin-ul tău și apelează-le din tema ta. Dacă vrei să rulezi cod din temă dintr-un plugin (nu este o idee bună), atunci folosește action hook-ul de mai sus pentru a aștepta tema și apoi apelează acele funcții din handler-ul de acțiune.

Am codul pentru trimiterea formularului în fișierul meu de plugin, așa că după aceea am folosit do_action('my_action') care nu funcționează :(

OK. Încep să înțeleg. Nu afișa formularul tău când plugin-ul tău este încărcat. Creează o funcție pentru el, apoi apelează acea funcție din tema ta. Voi actualiza răspunsul meu.
