Je développe un thème pour mon site web. Dès que j'ai activé le thème, les erreurs/avertissements suivants apparaissent en haut du panneau d'administration sur chaque page.
Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::removeDefaultEditorMenus() should not be called statically in C:\Users\...\wp-includes\plugin.php on line 406
Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::buildAdminMenu() should not be called statically in C:\Users\...\wp-includes\plugin.php on line 406
Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::addThemesPage() should not be called statically in C:\Users\...\wp-includes\plugin.php on line 406
Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::editorStylesheetAndScripts() should not be called statically in C:\Users\...\wp-includes\plugin.php on line 406
Je me demande comment résoudre ces erreurs sans que cela ne se produise plus? Voici une capture d'écran.
Donc vous avez votre code dans une classe, disons que ça ressemble à ça ...
<?php
class WPSE82245
{
public function action_init()
{
// do stuff
}
}
Maintenant, vous essayez de l'accrocher à quelque chose ...
add_action('init', 'array('WPSE82245', 'action_init'));
Que se passe-t-il lorsque le hook init
est activé, WordPress tente d'appeler votre méthode. Ce serait semblable à si vous venez d'écrire ceci ...
WPSE82245::action_init();
Mais PHP n'aime pas cela car vous n'avez pas déclaré votre méthode static
, c'est-à-dire qu'elle peut être utilisée sans instance de sa classe conteneur (comme dans l'exemple ci-dessus).
Cela a du sens, et si vous utilisiez $this
dans votre méthode? L'appeler de manière statique provoquerait une erreur d'exécution indiquant que $this
était utilisé en dehors d'un contexte d'objet.
Vous pouvez supprimer les erreurs en déclarant votre méthode static ...
<?php
class WPSE82245
{
public static function action_init()
{
// do stuff
}
}
Ou en utilisant une instance de votre classe comme premier élément du tableau, l'argument appelable de add_action
.
<?php
class WPSE82245
{
public function action_init()
{
// do stuff
}
}
$cls = new WPSE82245();
add_action('init', array($cls, 'action_init'));
Ce qui précède n’est qu’un exemple. Il existe plusieurs différentes façons d’instancier une classe dans un thème/un plugin WordPress.