web-dev-qa-db-fra.com

Le plugin d'action personnalisé ne fonctionne pas

J'essaye de créer un plugin de base où je veux créer mon propre crochet d'action. Voici le code pour le même.

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

do_action('basic_action_demo');
?>

Maintenant, après avoir activé ce plugin, je veux utiliser ce point d’action dans le fichier function.php de mon thème actuel, le code correspondant est le suivant:

add_action('basic_action_demo','action_demo');

function action_demo()
{
    echo "I am inside";
}

Maintenant, le problème est que mon action accrochée n'est jamais appelée, nous pouvons voir que do_action est appelée inconditionnellement, ainsi elle sera appelée à chaque chargement de page, mais elle n'entre jamais dans la méthode "action_demo".

Ce que j’ai compris jusqu’à présent, c’est que le plug-in est chargé avant l’exécution de mon fichier function.php de theme'e. Donc ici, do_action est appelé en premier, puis add_action.

Un indice serait vraiment apprécié.

Mettre à jour:

L'action ci-dessous du plugin fonctionne.

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

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

function action_demo()
{
    echo "I am Inside";
    die;
}
?>
1
Avinash

Votre plugin doit attendre que le fichier themes functions.php soit chargé. Essaye ça:

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

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

Le hook after_setup_theme est exécuté immédiatement après le chargement de functions.php.

Mise à jour pour votre commentaire ci-dessous. Dans votre plugin, créez une fonction pour votre formulaire:

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

function output_my_form () {
    echo "I'm a form";
    // do your action here
    do_action( 'basic_action_demo' );
}
?>

Puis dans le functions.php de votre thème:

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

Ceci est un exemple simple. En réalité, vous voudriez appeler cette fonction à partir d'un form.php dans votre thème.

5
Twifty