Conversiefout van matrix naar string in PHP 7.2 bij het retourneren van gebruikersrol als class

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

  • Is dit uw werkelijke, exacte code? Exact gekopieerd naar een nieuwe installatie veroorzaakt voor mij geen fouten. Weet je zeker dat de fout die wordt gegenereerd voor deze functie is?
  • Hallo Jacob, bedankt dat je contact met me hebt opgenomen – ja, dat is mijn exacte code. Ik roep de functie aan in de body-tag van mijn header.php-bestand, dus ik zal ernaar kijken en kijken of iets anders die fout kan veroorzaken. Ik ben er vrij zeker van dat het in deze functie zit …
  • Wacht, sorry, wat bedoel je " Ik roep de functie aan in de body-tag van mijn header .php-bestand ". Code voor filters zoals deze hoort thuis in functions.php, en dan gebruik je <?php body_class(); ?> in je headerbestand.
  • Sorry, het was laat toen ik dat plaatste, dus ik heb niet ' mezelf duidelijk gemaakt. Dit is wat ik in mijn header heb: <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!

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *