Eroare de conversie matrice în șiruri în PHP 7.2 atunci când se returnează rolul utilizatorului ca clasă

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

  • Acesta este codul dvs. real și exact? Copiat exact într-o nouă instalare nu provoacă erori pentru mine. Sunteți sigur că eroarea aruncată este pentru această funcție?
  • Bună Jacob, mulțumesc că m-ai întors – da, acesta este codul meu exact. Apel la funcția din eticheta de corp a fișierului header.php, așa că vom arunca o privire și vom vedea dacă altceva ar putea declanșa acea eroare. Destul de sigur că este în această funcție …
  • Așteptați, îmi pare rău, la ce vă referiți " Apel funcția din eticheta de corp a antetului meu .php fișier ". Codul pentru astfel de filtre aparține funcțiilor.php, apoi folosiți <?php body_class(); ?> în fișierul dvs. de antet.
  • Ne pare rău, a fost târziu când am postat asta, așa că am ' nu m-am clarificat. Aceasta este ceea ce am în antetul meu: <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!

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"); 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *