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
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");
<?php body_class(); ?>
dans votre fichier den-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!