Ansvarsfriskrivning: Jag är skräp på PHP, så var snäll och håll mig som jag Lär sig fortfarande. Jag får PHP-felet Array to string conversion
för följande kod:
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");
Detta började bara hända sedan jag uppgraderade till PHP 7.2 så jag antar att saker har förändrats med hur jag behöver hantera matriser, eller hur? Någon aning om hur man fixar?
Kommentarer
Svar
Den här koden fungerar och är helt giltig, körs 7.3, förutom när din användare har två 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; });
Vad vet du då, samma fel visas . Du skickar också en sträng som $classes
till din anonyma funktion, där-eftersom filtret tydligt kräver en matris.
Gör detta istället:
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
Jag upptäckte att problemet var att jag inte kontrollerade om användaren var inloggad innan du lägger till klassen. Här är min arbetskod för alla med samma problem:
header.php
<body <?php body_class( "animate" ); ?>>
(Obs! Klassen ”animera” är irrelevant, den används bara på min webbplats)
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 rubrikfilen.<body <?php body_class( 'animate'); ?> id="top">
så att den ' är korrekt inställd. Jag verkar ha hittat problemet – jag behövde kontrollera att användaren är inloggad innan jag lade till några klasser eftersom det tog bort alla klasser från body-taggen. Kommer att lägga upp svaret nu för alla andra som har samma problem – tack för din hjälp!