사용자 역할을 클래스

로 반환 할 때 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로 “배열을 올바르게 처리해야하는 방식이 변경되었다고 가정합니다. 수정 방법에 대해 알고 계십니까?

댓글

  • 이것이 실제 정확한 코드입니까? 새로 설치에 정확히 복사해도 오류가 발생하지 않습니다. 발생한 오류가이 함수에 대한 것이 확실한가요?
  • 안녕하세요, 제게 연락해 주셔서 감사합니다. 예, 제 정확한 코드입니다. 내 header.php 파일의 body 태그에서 함수를 호출하고 있으므로이를 살펴보고 다른 것이 해당 오류를 유발할 수 있는지 확인합니다. 그래도이 함수에있는 것이 확실합니다 …
  • 잠깐, 죄송합니다. 무슨 뜻인가요? " 헤더의 본문 태그에서 함수를 호출하고 있습니다. .php 파일 ". 이와 같은 필터에 대한 코드는 functions.php에 있으며 헤더 파일에서 <?php body_class(); ?>를 사용합니다.
  • 죄송합니다. 게시 할 때가 늦었 기 때문에 ' 자신을 명확히하지 않았습니다. 이것이 내 헤더에있는 것입니다. <body <?php body_class( 'animate'); ?> id="top"> 그래서 '가 올바르게 설정되었습니다. 문제를 발견 한 것 같습니다. body 태그에서 모든 클래스를 제거했기 때문에 클래스를 추가하기 전에 사용자가 로그인했는지 확인해야했습니다. 지금 같은 문제를 겪고있는 다른 사람에게 답변을 게시합니다. 도움을 주셔서 감사합니다!

답변

이 코드는 작동하며 완벽하게 유효하며 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"); 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다