web-dev-qa-db-fra.com

add_action dans functions.php, do_action dans le plugin?

J'essaie de définir une fonction add_action dans mon fichier functions.php de thème WordPress actuellement actif, pour une fonction do_action définie dans un plugin WordPress activé.

La fonction add_action dans mon fichier functions.php de thème WordPress actuellement actif ne fonctionne pas.

Cependant, cela fonctionne si je copie la fonction add_action à partir de mon fichier de thème WordPress actuellement actif functions.php dans le fichier de plug-in WordPress activé juste avant la fonction do_action.

Y a-t-il un moyen de faire cela?

1
Boyster

Tourné dans le noir ici, mais ...

Il est tout à fait possible que le plugin avec la définition do_action soit connecté avant le traitement du thème.

Découvrez où le do_action est défini et à quel moment il est connecté.

Vous devrez peut-être vous connecter à la fonction à laquelle la définition do_action est également connectée, et THEN à cette définition d'action.

Exemple:

Ouvrez le fichier de plug-in contenant la définition do_action à laquelle vous essayez de vous connecter avec votre fonction personnalisée.

Regardez pour voir si la définition do_action réside dans une fonction de plugin.

Si tel est le cas, recherchez dans le plug-in une référence add_action() de ce nom de fonction contenant la définition do_action.

Notez ce qu'est ce crochet.

Maintenant, vous savez quand WordPress appelle la fonction de ce plugin contenant la définition do_action.

Alors maintenant, dans votre fichier thème functions.php, vous pourriez avoir quelque chose de similaire au code suivant:

/**
 * This is the WordPress action the plugin's do_action function definition is 
 * hooked to.
 *
 * Example: This hook could be anything. I'm not saying the hook will be: "plugins_loaded" 
 * for sure, but if it was "plugins_loaded"... After WordPress loads and instantiates all 
 * of it's activated plugins, WordPress will fire the plugin's function containing the 
 * plugin's do_action definition (As long as the plugin you are trying to work with is 
 * activated). So you're getting on the same level as the plugin when it needs WordPress to 
 * execute this particular defined custom action and telling WordPress that your theme function
 * needs to be on that same level as well, before it can hook to your plugin's do_action reference.
 */
add_action('plugins_loaded', 'wpse_setup_theme');
function wpse_setup_theme(){
    /**
     * This your function that you want fired then the do_action is executed.
     *
     * Example: If the plugin file has a function named osmosis_jones() and 
     * inside osmosis_jones(), there is a do_action() reference. Note down 
     * the do_action tag name inside the osmosis_jones() function.
     */
    add_action('the_plugin_do_action_tag_name', 'wpse_display_theme_header');
}

function wpse_display_theme_header(){
    echo 'THEME HEADER HERE!';
}
4
Michael Ecklund