로 반환 할 때 PHP 7.2의 배열에서 문자열로 변환 오류가 발생했습니다.
면책 조항 : 저는 PHP에서 쓰레기입니다. 아직도 배우고 있습니다. 다음 코드에 대해 PHP 오류 Array to string conversion
가 표시됩니다.
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");
이 문제는 업그레이드 이후에만 발생했습니다. PHP 7.2로 “배열을 올바르게 처리해야하는 방식이 변경되었다고 가정합니다. 수정 방법에 대해 알고 계십니까?
댓글
답변
이 코드는 작동하며 완벽하게 유효하며 7.3에서 실행되지만 사용자에게 두 가지 역할이있는 경우를 제외하고는 다음과 같습니다.
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; });
그런 다음 무엇을 알 수 있습니까? 같은 오류가 나타납니다. . 또한 “문자열을 $classes
로 익명 함수에 전달합니다. 여기서 필터는 분명히 배열을 요구합니다.
대신 다음과 같이하십시오.
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; });
답변
문제는 사용자가 수업을 추가하기 전에 로그인했습니다. 동일한 문제가있는 사용자를위한 내 작업 코드는 다음과 같습니다.
header.php
<body <?php body_class( "animate" ); ?>>
(참고 : “animate”클래스는 관련이 없으며 내 사이트에서만 사용됨)
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">
그래서 '가 올바르게 설정되었습니다. 문제를 발견 한 것 같습니다. body 태그에서 모든 클래스를 제거했기 때문에 클래스를 추가하기 전에 사용자가 로그인했는지 확인해야했습니다. 지금 같은 문제를 겪고있는 다른 사람에게 답변을 게시합니다. 도움을 주셔서 감사합니다!