Hook-ul personalizat de acțiune din plugin nu funcționează

25 nov. 2013, 20:27:40
Vizualizări: 22.1K
Voturi: 2

Î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;
}
?>
4
Comentarii

Ordinea în care ai plasat acțiunile tale (do's și add's) nu este corectă. Te rog să explici ce încerci să realizezi cu propriul tău hook de acțiune, astfel încât să te putem ajuta să înțelegi unde și cum trebuie să le adaugi.

Twifty Twifty
25 nov. 2013 20:36:27

@Waldermort Ei bine, să presupunem că am un plugin cu un formular simplu. Vreau să apelez propriul meu hook de acțiune odată ce acel formular este trimis. Sper că este clar ce vreau să spun.

Avinash Avinash
25 nov. 2013 20:39:07

Îmi pare rău, dar nu este foarte clar. Poți apela hook-ul tău din scriptul care gestionează formularul, moment în care nucleul WordPress ar trebui să fie încărcat complet. Totul depinde de modul în care ai creat acel cod și cum gestionezi variabilele tale de interogare.

Twifty Twifty
25 nov. 2013 20:46:39

@Waldermort Problema pe care am identificat-o (din răspunsul tău de mai jos) este că fișierul pluginului este apelat înaintea fișierului temei. Ai vreo îndrumare specifică despre cum ar trebui gestionată această situație?

Avinash Avinash
25 nov. 2013 20:53:01
Toate răspunsurile la întrebare 1
5

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.

25 nov. 2013 20:40:59
Comentarii

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

Avinash Avinash
25 nov. 2013 20:48:32

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

Twifty Twifty
25 nov. 2013 21:00:55

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ă :(

Avinash Avinash
25 nov. 2013 21:03:41

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.

Twifty Twifty
25 nov. 2013 21:06:04

@Avinash Te rog să nu uiți să votezi pozitiv/accepți dacă consideri că răspunsul este util :)

Twifty Twifty
25 nov. 2013 21:38:58