$error = new WP_Error( $code, $message, $data );
Supposons que j'ai ajouté trois messages (msg A, msg B, msg C) au code my_code
et avec le dernier message, j'ai ajouté "Données" en tant que $data
, ce qui a écrasé tous les $data
ajoutés aux appels précédents de la classe d'erreur.
WP_Error Object
(
[errors] => Array
(
[my_code] => Array
(
[0] => "msg A"
[1] => "msg B"
[2] => "msg C"
)
)
[error_data] => Array
(
[my_code] => "Data"
)
)
Après avoir inspecté et joué avec la classe d'erreur wp, je suis arrivé aux questions suivantes:
Je peux transmettre un nombre illimité de $code
s à la classe, puis un nombre illimité de $message
s à chaque code. Le point est que je ne peux pas passer plus d'un $data
par $code
.
Q: Quel est le cas d'utilisation prévu de $data
?1)
1) Actuellement, j'essaie de construire une API de wrapper WP_Error assez simple (essentiellement un ensemble de fonctions faciles à utiliser). Le but est d’en faire un ticket de trace et de le déplacer vers WP core.
J'ai trouvé un comportement assez étrange dans /wp-includes/functions.php avec la fonction wp_die();
: Si vous fournissez un objet d'erreur, la fonction remplit automatiquement le titre fourni par $data['title']
. En regardant cela, je pensais que $data
pourrait être un tableau associatif pouvant contenir n’importe quelle quantité de données dynamiques supplémentaires.
Q: Mais - et ceci n’est valable que si tel est le cas d’utilisation prévu - si $data
est a) un tableau et b) j’ai ajouté avec succès des données supplémentaires: Comment pourrais-je le connecter aux messages correspondants? ?
Q: Plus loin: Pourquoi wp_die();
n'abandonne-t-il pas si je n'ai pas d'erreur? Cela rend son utilisation aussi dynamique - au cas où - la sortie d'erreur ajoutée est complètement invalide.
Vous pouvez trouver le ticket pour réparer le gestionnaire wp_die()
ici .
Vous trouverez un brouillon d’une première "API d’erreurs de thème" ici sur github . Forking, etc. et commenter est très apprécié.
$this->error_data[$code]
... l'objet WP_Error contient $ data dans un tableau et $ code est la clé. La méthode add_data
indique clairement:
Le code d'erreur ne peut contenir qu'une seule donnée d'erreur. Mais le
$data
(mélangé) peut être un tableau ou un objet et contenir autant de clés/propriétés que nécessaire. C'est à vos gestionnaires de décider comment ils l'interprètent.
Error $data
est un bonus pour un traitement personnalisé ultérieur de l'erreur. Votre propre fonction spéciale peut générer un WP_Error
et vous pouvez ajouter des données personnalisées dans le $data
qui peuvent être interprétées par votre propre gestionnaire d'erreur.
wp_die();
est identique à die;
, mais il affiche une sortie formatée avant de le faire. Il est prévu de mourir. die;
dans PHP n'est pas conditionnel. Il est censé s'arrêter là et wp_die();
est conçu pour imiter la fonctionnalité avec des capacités de sortie avancées avant la mort.
Le 'title'
dans le support $data
est juste un bonus permettant un support de titre intégré pour la WP_Error()
. Il est conçu de manière à ce qu'ils n'aient pas besoin de choisir quel message de error_code
est le titre si plusieurs sont présents. Ils utilisent simplement l'attribut title par défaut. NE JAMAIS COMPTER SUR CETTE FONCTIONNALITÉ PAR DÉFAUT! Utilisez toujours votre propre titre dans wp_die()
.
Aucune erreur ici, juste le comportement souhaité ... si j'ai bien compris votre question.
/**
* Creates a static global shared WP_Error object.
* The object is contained safely inside function body as static variable.
* It's also protected from external influence.
*
* @return WP_Error
*/
function theme_errors(){
static $wp_error; // Will hold global variable safely
return isset($wp_error) ? $wp_error : ($wp_error = new WP_Error(null, null, null));
}
// This is how you add errors (first call initializes the object).
theme_errors()->add($code = 'code', $message = 'message', $data = 'some data');
theme_errors()->add($code = 'code', $message = 'message', $data = 'some data');
// And then do some display stuff on shutdown
add_action('shutdown', function(){
// If conditions are met and errors exist:
if(!theme_errors()->get_error_codes()) return;
// Loop error codes and display errors
foreach(($codes = theme_errors()->get_error_codes()) as $code){
$message = theme_errors()->get_error_message($code);
$data = theme_errors()->get_error_data($code);
// Display stuff here
}
});
Alternative beaucoup plus facile. Nom du thème indépendant (nous travaillons uniquement avec le thème actif) . Variable globale protégée dans la fonction.