Disclaimer: ik ben een rotzooi van PHP, dus wees geduldig aangezien ik “m nog steeds aan het leren. Ik krijg de PHP-fout Array to string conversion
voor de volgende code:
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");
Dit is pas begonnen sinds ik een upgrade heb uitgevoerd naar PHP 7.2, dus ik ga ervan uit dat er dingen zijn veranderd met hoe ik met arrays moet omgaan, toch? Enig idee hoe dit te verhelpen?
Opmerkingen
Answer
Deze code werkt en is perfect geldig, draaiend op 7.3, behalve wanneer uw gebruiker twee rollen heeft:
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; });
Wat weet u dan, dezelfde fout verschijnt . Ook geef je een string door als $classes
aan je anonieme functie, waarbij het filter duidelijk een array vereist.
Doe dit in plaats daarvan:
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; });
Antwoord
Ik ontdekte dat het probleem was dat ik niet controleerde of de gebruiker ingelogd voordat ik de klas toevoeg. Hier is mijn werkende code voor iedereen met hetzelfde probleem:
header.php
<body <?php body_class( "animate" ); ?>>
(Opmerking: de klasse “animate” is niet relevant, deze wordt alleen gebruikt op mijn site)
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(); ?>
in je headerbestand.<body <?php body_class( 'animate'); ?> id="top">
zodat het ' correct is ingesteld. Ik schijn het probleem te hebben gevonden – ik moest controleren of de gebruiker was ingelogd voordat ik klassen toevoegde, omdat alle klassen uit de body-tag werden verwijderd. Zal het antwoord nu posten voor iedereen die met hetzelfde probleem vastzit – bedankt voor je hulp!