Array to string conversion error i PHP 7.2 når du returnerer brukerrolle som klasse

Ansvarsfraskrivelse: Jeg er søppel på PHP, så vær så snill å ha med meg som jeg lærer fortsatt. Jeg får PHP-feilen Array to string conversion for følgende kode:

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

Dette begynte bare å skje siden jeg oppgraderte til PHP 7.2, så jeg antar at ting har endret seg med hvordan jeg trenger å håndtere arrays, ikke sant? Har du noen ide om hvordan du løser det?

Kommentarer

  • Er dette din faktiske, nøyaktige kode? Kopiert nøyaktig til en ny installasjon forårsaker ingen feil for meg. Er du sikker på at feilen som kastes skyldes denne funksjonen?
  • Hei Jacob, takk for at du kom tilbake til meg – ja, det er den eksakte koden min. Jeg kaller funksjonen i kroppskoden til header.php-filen min, så ta en titt på det og se om noe annet kan utløse feilen. Ganske sikker på at det er i denne funksjonen …
  • Vent, beklager, hva mener du " Jeg kaller funksjonen i kroppskoden til overskriften min .php-fil ". Kode for filtre som dette hører hjemme i functions.php, og så bruker du <?php body_class(); ?> i overskriftsfilen din.
  • Beklager, det var sent da jeg postet det så jeg gjorde ikke ' meg klar. Dette er hva jeg har i overskriften min: <body <?php body_class( 'animate'); ?> id="top"> så den ' er satt opp riktig. Det ser ut til at jeg har funnet problemet – jeg trengte å sjekke at brukeren er logget inn før jeg la til noen klasser, da det fjernet alle klassene fra kroppskoden. Vil legge ut svaret nå for alle andre som har det samme problemet – takk for hjelpen!

Svar

Denne koden fungerer og er helt gyldig, kjører på 7.3, bortsett fra når brukeren har to roller:

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

Så, hva vet du, samme feil vises . Du sender også en streng som $classes til den anonyme funksjonen din, der filteret helt klart krever en matrise.

Gjør dette i stedet:

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

Svar

Jeg fant ut at problemet var at jeg ikke sjekket om brukeren var logget inn før du legger til klassen. Her er arbeidskoden min for alle med samme problem:

header.php

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

(Merk: «animer» -klassen er irrelevant, den brukes nettopp på nettstedet mitt)

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *