osztályig még tanul. Megkapom a PHP hibát Array to string conversion
a következő kódhoz:
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");
Ez csak azóta kezdődött, hogy frissítettem PHP 7.2-re, tehát feltételezem, hogy a dolgok megváltoztak azzal, hogy miként kell kezelnem a tömböket? Van ötlet a javításról?
Megjegyzések
Válasz
Ez a kód működik és tökéletesen érvényes, fut a 7.3-as verzión, kivéve, ha a felhasználónak két szerepe van:
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; });
Ezután mit tud, ugyanaz a hiba jelenik meg . Ezenkívül átad egy karakterláncot $classes
néven az anonim függvényének, ahol – mivel a szűrő egyértelműen tömböt igényel.
Tegye ezt helyette:
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; });
Válasz
Azt tapasztaltam, hogy a probléma az volt, hogy nem azt ellenőriztem, hogy a felhasználó az osztály hozzáadása előtt bejelentkezett. Itt van a munkakódom bárki számára, akinek ugyanaz a problémája van:
header.php
<body <?php body_class( "animate" ); ?>>
(Megjegyzés: az “animálás” osztály lényegtelen, csak a webhelyemen használják)
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(); ?>
-t használja.<body <?php body_class( 'animate'); ?> id="top">
tehát ' megfelelően van beállítva. Úgy tűnik, hogy megtaláltam a problémát – az osztályok hozzáadása előtt ellenőriznem kellett, hogy a felhasználó be van-e jelentkezve, mivel az eltávolította az összes osztályt a törzscímkéből. Most közzéteszi a választ bárki más számára, akinél ugyanaz a probléma áll fenn – köszönöm a segítséget!