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
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");
<?php body_class(); ?>
i din headerfil.<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!