Fehler bei der Konvertierung von Arrays in Zeichenfolgen in PHP 7.2 bei Rückgabe der Benutzerrolle als Klasse

Haftungsausschluss: Ich bin Müll bei PHP, also bitte nehmen Sie mich mit, wie ich bin ich lerne immernoch. Ich erhalte den PHP-Fehler Array to string conversion für den folgenden 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"); 

Dies geschah erst seit dem Upgrade auf PHP 7.2, also gehe ich davon aus, dass sich die Dinge geändert haben, wie ich mit Arrays umgehen muss, oder? Haben Sie eine Idee, wie Sie das Problem beheben können?

Kommentare

  • Ist dies Ihr tatsächlicher, genauer Code? Genau in eine Neuinstallation kopiert, verursacht für mich keine Fehler. Sind Sie sicher, dass der Fehler für diese Funktion ausgegeben wird?
  • Hallo Jacob, danke, dass Sie sich bei mir gemeldet haben – ja, das ist mein genauer Code. Ich rufe die Funktion im body-Tag meiner Datei header.php auf. Sehen Sie sich das an und prüfen Sie, ob irgendetwas anderes diesen Fehler auslösen könnte. Ich bin mir ziemlich sicher, dass es sich um diese Funktion handelt …
  • Warten Sie, sorry, was meinen Sie damit? " Ich rufe die Funktion im Body-Tag meines Headers auf .php-Datei ". Code für solche Filter gehört in die Datei functions.php, und dann verwenden Sie <?php body_class(); ?> in Ihrer Header-Datei.
  • Entschuldigung, es war spät, als ich das gepostet habe ' hat mich nicht klar gemacht. Folgendes habe ich in meinem Header: <body <?php body_class( 'animate'); ?> id="top">, damit ' korrekt eingerichtet ist. Ich habe das Problem anscheinend gefunden. Ich musste überprüfen, ob der Benutzer angemeldet ist, bevor ich Klassen hinzufügte, da alle Klassen vom Body-Tag entfernt wurden. Wird die Antwort jetzt für alle anderen veröffentlichen, die sich mit demselben Problem befassen – danke für Ihre Hilfe!

Antwort

Dieser Code funktioniert und ist unter 7.3 einwandfrei gültig, es sei denn, Ihr Benutzer hat zwei Rollen:

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

Wie Sie wissen, wird derselbe Fehler angezeigt . Außerdem übergeben Sie eine Zeichenfolge als $classes an Ihre anonyme Funktion, wobei der Filter eindeutig ein Array anfordert.

Führen Sie stattdessen Folgendes aus:

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

Antwort

Ich stellte fest, dass das Problem darin bestand, dass ich nicht überprüfte, ob der Benutzer dies war Vor dem Hinzufügen der Klasse angemeldet. Hier ist mein Arbeitscode für alle mit demselben Problem:

header.php

<body <?php body_class( "animate" ); ?>> 

(Hinweis: Die Klasse „animieren“ ist irrelevant, sie wird nur auf meiner Website verwendet)

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.