Erreur de conversion tableau en chaîne dans PHP 7.2 lors du retour du rôle de lutilisateur en tant que classe

Avertissement: Je « moche à PHP, donc sil vous plaît soyez avec moi comme je » m encore à apprendre. Jobtiens lerreur PHP Array to string conversion pour le code suivant:

function osu_add_role_to_body($classes = "") { $current_user = new WP_User(get_current_user_id()); $user_role = array_shift($current_user->roles); $classes = []; $classes[] = "role-" . $user_role; return $classes; } add_filter("body_class","osu_add_role_to_body"); 

Cela na commencé que depuis la mise à niveau à PHP 7.2 donc je suppose que les choses ont changé avec la façon dont je dois traiter les tableaux, non? Une idée de la façon de résoudre le problème?

Commentaires

  • Sagit-il de votre code réel et exact? Copier exactement dans une nouvelle installation ne me cause aucune erreur. Êtes-vous certain que lerreur générée concerne cette fonction?
  • Bonjour Jacob, merci de mavoir répondu – oui, cest mon code exact. Jappelle la fonction dans la balise body de mon fichier header.php, je vais donc y jeter un coup dœil et voir si quelque chose dautre pourrait déclencher cette erreur. Bien sûr, cest dans cette fonction …
  • Attendez, désolé, que voulez-vous dire " Jappelle la fonction dans la balise body de mon en-tête Fichier .php ". Le code pour des filtres comme celui-ci appartient à functions.php, puis vous utilisez <?php body_class(); ?> dans votre fichier den-tête.
  • Désolé, il était tard lorsque jai publié cela, alors je ' ne ma pas été clair. Voici ce que jai dans mon en-tête: <body <?php body_class( 'animate'); ?> id="top"> donc il ' est configuré correctement. Je semble avoir trouvé le problème – je devais vérifier que lutilisateur est connecté avant dajouter des classes car il supprimait toutes les classes de la balise body. Publiera la réponse maintenant pour toute autre personne confrontée au même problème – merci pour votre aide!

Réponse

Ce code fonctionne et est parfaitement valide, fonctionnant sur 7.3, sauf lorsque votre utilisateur a deux rôles:

add_filter( "body_class", function( $classes = "" ) { $current_user = new \WP_User(get_current_user_id()); $user_role = ["administrator", "moderator"]; //just a test, but this is what it"ll look like if it had 2 roles. $classes = []; $classes[] = "role-" . $user_role; return $classes; }); 

Alors, que savez-vous, la même erreur apparaît . De plus, vous « passez une chaîne sous la forme $classes à votre fonction anonyme, alors que le filtre exige clairement un tableau.

Faites ceci à la place:

add_filter( "body_class", function( $classes ) { $current_user = wp_get_current_user(); foreach( $current_user->roles as $user_role ) { $classes[] = "role-" . $user_role; } return $classes; }); 

Réponse

Jai trouvé que le problème était que je ne vérifiais pas si lutilisateur était connecté avant dajouter la classe. Voici mon code de travail pour toute personne ayant le même problème:

header.php

<body <?php body_class( "animate" ); ?>> 

(Remarque: la classe « animate » nest pas pertinente, elle vient dêtre utilisée dans mon site)

functions.php

function osu_add_role_to_body($classes = "") { if( is_user_logged_in() ) { $current_user = new WP_User(get_current_user_id()); $user_role = array_shift($current_user->roles); $classes[] = "role-" . $user_role; } return $classes; } add_filter("body_class","osu_add_role_to_body"); 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *