Zřeknutí se odpovědnosti: Jsem v PHP nesmysl, takže mě prosím mějte stále se učím. Zobrazuje se mi chyba PHP Array to string conversion
pro následující kód:
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");
K tomu došlo teprve od upgradu na PHP 7.2, takže předpokládám, že se věci změnily v tom, jak se musím vypořádat s poli, že? Máte nějaký nápad, jak to opravit?
Komentáře
Odpovědět
Tento kód funguje a je naprosto platný, běží na verzi 7.3, s výjimkou případů, kdy má váš uživatel dvě 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; });
Poté, co víte, se zobrazí stejná chyba . Také předáváte řetězec jako $classes
do své anonymní funkce, kde – protože filtr jasně vyžaduje pole.
Postupujte místo toho:
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; });
Odpověď
Zjistil jsem, že problém byl v tom, že jsem nekontroloval, zda je uživatel přihlášen před přidáním třídy. Zde je můj pracovní kód pro kohokoli se stejným problémem:
header.php
<body <?php body_class( "animate" ); ?>>
(Poznámka: třída „animovat“ je irelevantní, používá se pouze na mých stránkách)
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(); ?>
v hlavičkovém souboru.<body <?php body_class( 'animate'); ?> id="top">
takže je ' nastaveno správně. Zdá se, že jsem našel problém – potřeboval jsem zkontrolovat, zda je uživatel přihlášen před přidáním jakýchkoli tříd, protože odstraňoval všechny třídy ze značky body. Zveřejní odpověď teď pro kohokoli jiného, kdo má stejný problém – děkujeme za vaši pomoc!