web-dev-qa-db-fra.com

Avertissement/erreur dans le panneau d'administration lors du développement du thème

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.

enter image description here

1
devs

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.

5
chrisguitarguy