Declinare de responsabilitate: Sunt „gunoi la PHP, așa că vă rog să mă purtați așa cum am” m inca invat. Primesc eroarea PHP Array to string conversion
pentru următorul cod:
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");
Acest lucru a început să se întâmple numai de când am făcut upgrade la PHP 7.2, așa că presupun că lucrurile s-au schimbat cu modul în care trebuie să fac față matricelor, nu? Aveți vreo idee despre cum să remediați?
Comentarii
Răspuns
Acest cod funcționează și este perfect valid, rulează pe 7.3, cu excepția cazului în care utilizatorul dvs. are două roluri:
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; });
Apoi, ce știți, apare aceeași eroare . De asemenea, „treceți un șir ca $classes
funcției dvs. anonime, unde filtrul necesită în mod clar o matrice.
Faceți asta în schimb:
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ăspuns
Am constatat că problema era că nu verificam dacă utilizatorul era m-am conectat înainte de a adăuga clasa. Iată codul meu de lucru pentru oricine are aceeași problemă:
header.php
<body <?php body_class( "animate" ); ?>>
(Notă: clasa „animate” este irelevantă, este folosită doar pe site-ul meu)
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(); ?>
în fișierul dvs. de antet.<body <?php body_class( 'animate'); ?> id="top">
așa că ' este configurat corect. Se pare că am găsit problema – trebuia să verific dacă utilizatorul este conectat înainte de a adăuga clase, întrucât elimina toate clasele din eticheta corpului. Va posta răspunsul acum pentru oricine altcineva blocat cu aceeași problemă – mulțumesc pentru ajutor!