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