워드프레스 기본 역할 재설정하기 (Call to a member function has_cap() on null 오류)

Last Updated: 2024년 06월 21일 댓글

워드프레스 멀티사이트에 연결된 한 사이트에서 케이보드(Kboard) 플러그인을 활성화하려고 시도하니 "치명적인 오류를 격발하였기에 플러그인을 활성화할 수 없습니다 (Plugin could not be activated because it triggered a fatal error)" 오류가 발생하면서 플러그인이 활성화되지 않는 문제가 발생했습니다.

워드프레스 치명적인 오류

오류 로그를 확인해보니 케이보드 파일에서 "Call to a member function has_cap() on null..." 에러가 발생하고 있었습니다.

PHP Fatal error:  Uncaught Error: Call to a member function has_cap() on null in /home/public_html/wp-content/plugins/kboard/index.php:2107
Stack trace:

이런 문제가 발생하는 경우 관리자 권한이 제대로 설정되어 있는지 체크하고, 사용자 역할이 올바르게 설정되어 있지 않으면 관리자 권한을 지정하면 오류가 해결될 것입니다. 역할(회원 등급)을 지정하지 못하는 경우에는 기본 역할을 재설정하는 것을 고려할 수 있습니다. 저는 기본 사용자 역할을 리셋하여 문제를 해결했습니다.

워드프레스 기본 역할 재설정하기

워드프레스 기본 역할 재설정하기 (Call to a member function has_cap() on null 오류)

"PHP Fatal error: Uncaught Error: Call to a member function has_cap() on null" 에러를 격발시키는 코드를 살펴보니 다음과 같았습니다.

	// 관리자에게 manage_kboard 권한 추가
	$admin_role = get_role('administrator');
	if(!$admin_role->has_cap('manage_kboard')){
		$admin_role->add_cap('manage_kboard', true);
	}

has_cap() 함수

워드프레스에서는 각 사용자에게 하나 이상의 역할(role)을 부여할 수 있으며, 각 역할에는 여러 개의 권한(capability)이 지정될 수 있습니다. 예를 들어, 관리자(Administrator) 역할은 게시물 작성, 편집, 삭제 등 다양한 권한을 가질 수 있습니다.

has_cap()은 특정 사용자가 특정 권한을 가지고 있는지 확인하는 데 사용되는 함수입니다.

워프에서 다음과 같은 권한이 자주 사용됩니다.

  • read: 사이트의 콘텐츠를 읽을 수 있는 권한
  • edit_posts: 게시글(글/페이지) 편집는 권한
  • delete_posts: 게시글 삭제 권한
  • publish_posts: 게시글 발행(게시) 권한
  • upload_files: 파일 업로드 권한
  • manage_options: 사이트 설정을 관리할 수 있는 권한
  • update_core: 워드프레스 코어를 업데이트할 수 있는 권한
  • activate_plugins: 플러그인 활성화 권한
  • edit_users: 사용자 편집 권한

문제의 코드는 관리자가 manage_kboard(케이보드를 관리) 권한이 없다면 관리할 수 있는 권한을 부여하고, 관리자 역할이 없다면 null을 반환합니다.

결론적으로 해당 사용자의 역할(role)이 관리자가 아니기 때문에 치명적인 오류가 발생하였던 것입니다. 그러므로 해당 사용자에게 관리자 권한을 부여하면 문제가 해결됩니다.

멀티사이트에서 사용자에게 관리자 권한 부여하기

멀티사이트에서 내 사이트 » 네트워크 관리자 » 사이트 » 모든 사이트로 이동하여 해당 사이트를 선택하고, 사용자 탭에서 관리자로 지정된 사용자에게 '관리자' 역할을 부여할 수 있습니다.

멀티사이트 사용자 역할 변경하기

만약 해당 사용자에게 "관리자" 역할을 부여하는 데 실패한다면, 문제의 사이트에 '관리자' 역할이 없을 수 있습니다.

실제로 문제가 발생하는 사이트에서 역할을 변경하려고 시도해보니 '관리자' 역할이 없었습니다. 아마도 사용자 역할을 편집하는 플러그인을 사용하거나 코드를 사용하여 역할을 새로 정의하면서 기존 역할이 삭제되었던 것 같습니다.

이 상황인 경우 해당 사이트에서 워드프레스 기본 역할을 재설정하면 관리자 역할을 부여할 수 있게 될 것입니다.

워드프레스 기본 역할 재설정(초기화)하기

워드프레스 기본 역할을 재설정하려는 경우, 다음 코드를 테마의 함수 파일에 추가할 수 있습니다.

function restore_default_roles() {
	// 관리자 역할을 복구
	add_role('administrator', 'Administrator', array(
		'read' => true,
		'edit_posts' => true,
		'delete_posts' => true,
		'publish_posts' => true,
		'upload_files' => true,
		'manage_options' => true,
		'update_core' => true,
		'activate_plugins' => true,
		'edit_plugins' => true,
		'install_plugins' => true,
		'delete_plugins' => true,
		'edit_themes' => true,
		'install_themes' => true,
		'update_themes' => true,
		'delete_themes' => true,
		'edit_users' => true,
		'list_users' => true,
		'create_users' => true,
		'delete_users' => true,
		'remove_users' => true,
		'promote_users' => true,
		'edit_dashboard' => true,
		'import' => true,
		'unfiltered_html' => true,
	));

	// 다른 기본 역할도 동일한 방식으로 복구 가능
	// 예: 편집자 역할 복구
	add_role('editor', 'Editor', array(
		'read' => true,
		'edit_posts' => true,
		'delete_posts' => true,
		'publish_posts' => true,
		'upload_files' => true,
		'moderate_comments' => true,
		'edit_others_posts' => true,
		'delete_others_posts' => true,
		'manage_categories' => true,
		'edit_pages' => true,
		'delete_pages' => true,
		'edit_others_pages' => true,
		'delete_others_pages' => true,
		'read_private_pages' => true,
		'read_private_posts' => true,
	));
}

// 이 함수가 테마가 활성화될 때 실행되도록 합니다.
add_action('after_switch_theme', 'restore_default_roles');

// 또는 별도의 플러그인으로 생성 시 플러그인 활성화 시 실행되도록 합니다.
// register_activation_hook(__FILE__, 'restore_default_roles');

그런 다음, 테마를 다른 테마로 바꾸었다가 다시 해당 테마로 바꾸면 역할이 재설정될 것입니다. 워드프레스 기본 역할(회원 등급)이 초기화되면 위의 코드를 삭제할 수 있습니다.

위의 코드를 추가하기 전에 DB 백업을 확실히 할 것을 권장합니다. 카페24, 패스트코멧, 클라우드웨이즈 등에서는 자동 백업/복원이 가능하지만, 그런 경우에도 백업을 해놓는 것인 좋을 수 있습니다. UpdraftPlus와 같은 플러그인으로 디비를 쉽게 백업할 수 있습니다.

이 작업을 하려면 FTP에 접속할 수 있어야 합니다.

마치며

이상으로 Call to a member function has_cap() on null... 오류가 발생하면서 플러그인을 활성화하지 못하는 문제를 해결하는 방법을 살펴보았습니다. 처음에는 Kboard 게시판 자체의 문제라 생각했었는데, 이 문제를 조금 파고 들어가 보니 '관리자' 역할이 지정되어 있지 않아서 발생하는 것으로 의심되어 워드프레스의 기본 역할들을 재설정하니 문제가 해결되었습니다.

참고

댓글 남기기

Leave a Comment

카카오톡 상담 카톡 서비스 상담