Zastrzeżenie: Jestem śmieciem w PHP, więc proszę o wyrozumiałość wciąż się uczę. Otrzymuję błąd PHP Array to string conversion
dla następującego kodu:
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");
To zaczęło się dziać dopiero od czasu aktualizacji do PHP 7.2, więc zakładam, że coś się zmieniło, jeśli chodzi o sposób radzenia sobie z tablicami, prawda? Masz pomysł, jak to naprawić?
Komentarze
Odpowiedź
Ten kod działa i jest całkowicie poprawny, działa w wersji 7.3, z wyjątkiem sytuacji, gdy użytkownik ma dwie role:
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; });
Następnie, co wiesz, pojawia się ten sam błąd . Ponadto „przekazujesz ciąg jako $classes
do swojej funkcji anonimowej, gdzie filtr wyraźnie wymaga tablicy.
Zamiast tego zrób to:
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; });
Odpowiedź
Okazało się, że problem polega na tym, że nie sprawdzałem, czy użytkownik zalogowałem się przed dodaniem klasy. Oto mój działający kod dla każdego, kto ma ten sam problem:
header.php
<body <?php body_class( "animate" ); ?>>
(Uwaga: klasa „animate” jest nieistotna, jest właśnie używana w mojej witrynie)
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(); ?>
.<body <?php body_class( 'animate'); ?> id="top">
, więc ' jest poprawnie skonfigurowany. Wydaje się, że znalazłem problem – musiałem sprawdzić, czy użytkownik jest zalogowany przed dodaniem jakichkolwiek klas, ponieważ usuwał wszystkie klasy z tagu body. Opublikuje odpowiedź teraz dla każdego, kto ma ten sam problem – dziękujemy za pomoc!