Tömb a karakterlánc konvertálási hibájáért a PHP 7.2-ben, amikor a felhasználói szerepkört visszatérítjük

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

  • Ez a tényleges, pontos kódod? Pontosan egy új telepítésre másolva nem okoz hibát számomra. Biztos benne, hogy a dobott hiba erre a funkcióra vonatkozik?
  • Szia Jacob, köszönöm, hogy visszajöttél hozzám – igen, ez az én pontos kódom. A függvényt a header.php fájl törzscímkéjében hívom meg, ezért nézze meg ezt, és hátha valami más kiváltja ezt a hibát. Pedig eléggé biztos benne, hogy ebben a funkcióban van …
  • Várjon, sajnálom, mit jelent " A fejléc törzscímkéjében hívom a függvényt .php fájl ". Az ehhez hasonló szűrők kódja a függvények.php-hez tartozik, majd a fejlécfájlban az <?php body_class(); ?> -t használja.
  • Sajnos késő volt, amikor ezt közzétettem. nem ' nem tette egyértelművé magam. Ez van a fejlécemben: <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!

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük