web-dev-qa-db-fra.com

Passer les informations de fonctions.php au plugin

Quel est le meilleur moyen de transmettre certaines informations de functions.php à un plugin?

Je dois donner à un utilisateur la possibilité depasserune donnéedeleur fichier functions.phpàmon plugin. (Ce peut être n'importe quelle donnée, juste quelque chose que je peux vérifier; cela peut être une valeur de variable, ou même le fait qu'une variable a été définie ou qu'une fonction a été définie.)

J'ai essayé la suggestion trouvée ici:

Passer une valeur de l'extérieur à une variable de plugin

J'ai branché ce code mot pour mot:

Sur votre plugin:

 $value = 0;
 $value = apply_filter('get_value_from_function', $value);

Puis sur functions.php

add_filter('get_value_from_function', 'my_special_value_treatment', 10, 1);
function my_special_value_treatment ($value){
    return 1;
}

Mais cela entraîne une erreur:

Erreur fatale: appel de la fonction non définie apply_filter () dans /pathtomyplugin/my-plugin-name/my-plugin-name.php à la ligne 93

Je ne comprends pas pourquoi cela échoue. Quelle est la meilleure façon de procéder?

Edité avec cet ajout:

Après le changer pour apply_filters(), cela se produit encore ... Dans mon plugin:

$value = 0;
$value = apply_filters('get_value_from_function', $value);
if ($value===0) {
    $test_info = 'not_passed';
} else {
    $test_info = 'passed';
};
// $test_info is not_passed
1
hommealone

Les plugins sont chargés avant le thème, ce qui signifie que votre apply_filters ne contiendra aucun rappel réel. Au lieu de cela, vous devez appeler votre apply_filters après le chargement du thème. Quelque chose comme ça:

/* Your plugin's file: */

add_action( 'init', 'my_lovely_funky_filters' );

function my_lovely_funky_filters() {
    /* Fire our callbacks */
    $value = 0;
    $value = apply_filters( 'get_value_from_function', $value );

    /* Check your $value now */
    /* echo "<pre>{$value}</pre>"; */
}

/* Your functions.php file */

add_filter( 'get_value_from_function', 'my_special_value_treatment', 10, 1 );
function my_special_value_treatment( $value ) {
    /* A little more interesting */
    return (int)$value + 1;
}
2
webtoure

C'est la bonne méthode - sauf que la fonction est apply_filters, pas apply_filter. D'où votre erreur.

0
vancoder