Array til strengkonverteringsfejl i PHP 7.2 ved returnering af brugerrolle som klasse

Ansvarsfraskrivelse: Jeg er skrald ved PHP, så vær så god med mig som jeg “m lærer stadig. Jeg får PHP-fejlen 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 begyndte først at ske, siden jeg opgraderede til PHP 7.2, så jeg antager, at tingene har ændret sig, hvordan jeg skal håndtere arrays, ikke? Har du nogen idé om, hvordan du løser det?

Kommentarer

  • Er dette din aktuelle, nøjagtige kode? Kopieret nøjagtigt til en ny installation medfører ikke nogen fejl for mig. Er du sikker på, at den fejl, der kastes, vedrører denne funktion?
  • Hej Jacob, tak fordi du kom tilbage til mig – ja, det er min nøjagtige kode. Jeg kalder funktionen i body tag i min header.php-fil, så kig på det og se om noget andet kan udløse denne fejl. Ganske sikker på, at det er i denne funktion …
  • Vent, undskyld, hvad mener du " Jeg kalder funktionen i body tag i min header .php-fil ". Kode til filtre som denne hører hjemme i functions.php, og derefter bruger du <?php body_class(); ?> i din headerfil.
  • Beklager, det var sent, da jeg sendte det, så jeg gjorde ikke ' mig klar. Dette er hvad jeg har i min overskrift: <body <?php body_class( 'animate'); ?> id="top"> så det ' er indstillet korrekt. Det ser ud til, at jeg har fundet problemet – jeg havde brug for at kontrollere, at brugeren er logget ind, før jeg tilføjede klasser, da det fjernede alle klasser fra body tag. Sender svaret nu for alle andre, der sidder fast i det samme problem – tak for din hjælp!

Svar

Denne kode fungerer og er perfekt gyldig, kører den 7.3, undtagen når din bruger 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å hvad ved du, den samme fejl vises . Du sender også en streng som $classes til din anonyme funktion, hvor-da filteret tydeligt kræver en matrix.

Gø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 fandt ud af, at problemet var, at jeg ikke kontrollerede, om brugeren var logget ind før du tilføjer klassen. Her er min arbejdskode til alle med samme problem:

header.php

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

(Bemærk: “animer” -klassen er irrelevant, den bruges lige på mit websted)

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *