WordPress デフォルトの役割をリセットする (Call to a member function has_cap() on null エラー)

Last Updated:2024年06月21日| コメントを残す

WordPress マルチサイトに接続されている1つのサイトで KBoard(Kboard)プラグインを有効にしようとしています」致命的なエラーが発生したため、プラグインを有効にできません(Plugin could not be activated because it triggered a fatal error)「エラーが発生したときにプラグインがアクティブにならない問題が発生しました。

WordPress 致命的なエラー

エラーログを確認してください。 KBoard ファイルで "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:

この問題が発生した場合は管理者権限が正しく設定されていることを確認し、ユーザーの役割が正しく設定されていない場合は管理者権限を指定するとエラーが解決します。役割(メンバーシップの評価)を指定できない場合は、デフォルトの役割をリセットすることを検討できます。私はデフォルトのユーザーロールをリセットして問題を解決しました。

WordPress デフォルトの役割をリセットする

WordPress デフォルトの役割をリセットする (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() 関数

WordPressでは、各ユーザーに1つ以上の役割を付与でき、各役割には複数の権限を割り当てることができます。たとえば、管理者ロールには、投稿の作成、編集、削除など、さまざまな権限があります。

has_cap()は、特定のユーザーが特定の権限を持っていることを確認するために使用される関数です。

ワープでは、次の権限がよく使用されます。

  • read: サイトのコンテンツを読み取る権限
  • edit_posts:投稿(投稿/ページ)の編集権限
  • delete_posts: 投稿の削除権限
  • publish_posts:投稿発行(公開)権限
  • upload_files: ファイルのアップロード権限
  • manage_options: サイト設定を管理する権限
  • update_core: WordPress コアを更新する権限
  • activate_plugins: プラグインの有効化権限
  • edit_users: ユーザー編集権限

問題のコードは、管理者が manage_kboard(KBoard(管理)権限がない場合は管理する権限を付与し、管理者の役割がない場合はnullを返します。

結論として、そのユーザーの役割は管理者ではないため、致命的なエラーが発生しました。したがって、そのユーザーに管理者権限を付与すると問題が解決します。

マルチサイトでユーザーに管理者を許可する

マルチサイトで 私のサイト»ネットワーク管理者»サイト»すべてのサイトに移動してそのサイトを選択し、 ユーザー タブで管理者として指定されたユーザーに「管理者」ロールを付与できます。

マルチサイトユーザーの役割を変更する

そのユーザーに「管理者」の役割を付与できない場合は、問題のサイトに「管理者」の役割がない可能性があります。

実際に問題が発生しているサイトで役割を変更しようとすると、「管理者」の役割はありませんでした。おそらく、ユーザーの役割を編集するプラグインを使用したり、コードを使用して新しい役割を定義したりして、既存の役割が削除されたようです。

この状況の場合、そのサイトで WordPress デフォルトの役割をリセットすると、管理者の役割を付与できるようになります。

WordPress デフォルトの役割をリセット(初期化)する

WordPress デフォルトの役割をリセットする場合は、次のコードをテーマの関数ファイルに追加できます。

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

その後、テーマを別のテーマに変更してからそのテーマに変更すると、役割がリセットされます。 WordPress デフォルトの役割(メンバーシップ評価)が初期化されたら、上記のコードを削除できます。

上記のコードを追加する前に、DBバックアップを確実にすることをお勧めします。 Cafe24, ファーストコメット, クラウドウェイズ などでは自動バックアップ/復元が可能ですが、そのような場合でもバックアップをしておくのが良いかもしれません。 UpdraftPlusのようなプラグインを使って、ディビを簡単にバックアップできます。

これを行うには、FTPに接続できる必要があります。

最後に、

以上で Call to a member function has_cap() on null... エラーが発生したときにプラグインを有効にできない問題を解決する方法を見てきました。最初はKboard掲示板自体の問題だと思っていましたが、この問題を少し掘り込んでみると「管理者」の役割が指定されていないために発生すると疑われます。 WordPressの基本的な役割をリセットして問題を解決しました。

参照


コメントを残す

コメント