2026年5月21日
2026年5月21日
Ultimate Memberのエラーを解決する方法
はじめに
Ultimate Memberでユーザー登録フォームを送信しても「登録が完了しませんでした」と表示されてアカウントが作成されない・プロフィールページで画像をアップロードしようとすると「ファイルサイズが大きすぎます」エラーが出る・管理者が登録したカスタムフィールドがフロントエンドに表示されない・特定のユーザーロールに対してのみメニューを表示したいといった問題は、PHP設定・ファイルパーミッション・フォーム設定が原因です。
症状・原因
- 登録フォームを送信するとエラーなくリダイレクトされるがユーザーが作成されていない
- プロフィール画像のアップロードで「The uploaded file exceeds the upload_max_filesize」エラーが出る
- 管理画面で追加したカスタムフィールドがフロントエンドのプロフィールページに表示されない
- 登録承認メールが管理者に届かない
解決手順
ステップ1:Ultimate Memberの状態を確認する
# Ultimate Memberの設定確認
wp eval "
if (defined('ultimatemember_version')) {
echo 'Ultimate Member version: ' . ultimatemember_version . PHP_EOL;
}
// UM設定を確認
echo 'Registration page: ' . get_option('um_core_page_register') . PHP_EOL;
echo 'Login page: ' . get_option('um_core_page_login') . PHP_EOL;
echo 'Profile page: ' . get_option('um_core_page_user') . PHP_EOL;
echo 'Account page: ' . get_option('um_core_page_account') . PHP_EOL;
// 登録設定
\$settings = get_option('um_settings', []);
echo 'Admin approval: ' . ((\$settings['registration']['admin_approval'] ?? false) ? 'yes' : 'no') . PHP_EOL;
echo 'Email activation: ' . ((\$settings['registration']['email_activation'] ?? false) ? 'yes' : 'no') . PHP_EOL;
echo 'Default role: ' . (\$settings['registration']['role'] ?? 'subscriber') . PHP_EOL;
// UMユーザー統計
global \$wpdb;
\$um_users = \$wpdb->get_var(
\"SELECT COUNT(*) FROM \$wpdb->usermeta WHERE meta_key = 'um_user_roles'\"
);
echo 'UM registered users: ' . \$um_users . PHP_EOL;
// 保留中のユーザーを確認
\$pending = get_users(['meta_key' => 'um_status', 'meta_value' => 'awaiting_admin_review', 'number' => 5]);
echo 'Pending approvals: ' . count(\$pending) . PHP_EOL;
"
ステップ2:ユーザー登録をカスタマイズする
// functions.php: Ultimate Member登録設定
// ① 登録完了後にカスタム処理を実行
add_action('um_after_user_register', function(int $user_id): void {
// デフォルトのユーザーメタを設定
update_user_meta($user_id, 'um_profile_visibility', 'public');
update_user_meta($user_id, '_um_last_login', current_time('timestamp'));
// ウェルカムメールを送信
$user = get_userdata($user_id);
wp_mail(
$user->user_email,
sprintf('[%s] ご登録ありがとうございます', get_bloginfo('name')),
sprintf("こんにちは %s さん、\n\n%s へのご登録ありがとうございます。\n\nプロフィールURL: %s",
$user->display_name,
get_bloginfo('name'),
um_user_profile_url($user_id)
)
);
error_log(sprintf('[UM] New user registered: #%d %s', $user_id, $user->user_email));
}, 10);
// ② 登録フォームのバリデーションをカスタマイズ
add_filter('um_registration_validate_fields', function(array $submitted_data, array $form_data): array {
// ユーザー名に禁止ワードを含む場合は拒否
$banned_words = ['admin', 'test', 'null', 'undefined'];
foreach ($banned_words as $word) {
if (str_contains(strtolower($submitted_data['user_login'] ?? ''), $word)) {
UM()->form()->add_error('user_login', 'このユーザー名は使用できません。');
}
}
return $submitted_data;
}, 10, 2);
// ③ 管理者承認後のロールを自動設定
add_action('um_after_user_approved', function(int $user_id): void {
$user = new WP_User($user_id);
// 登録フォームで選択した職種に応じてロールを付与
$occupation = get_user_meta($user_id, 'occupation', true);
if ($occupation === 'developer') {
$user->set_role('editor');
}
});
ステップ3:プロフィール画像アップロードを修正する
// functions.php: プロフィール画像設定
// ① アップロード可能なファイルサイズを拡大
add_filter('um_profile_photo_max_size', function(int $size): int {
return 5 * 1024 * 1024; // 5MB(デフォルト1MB)
});
// ② 許可する画像形式を設定
add_filter('um_profile_photo_allowed_types', function(array $types): array {
return ['image/jpeg', 'image/png', 'image/webp'];
});
// ③ アップロードディレクトリのパーミッション確認
add_action('admin_notices', function(): void {
$upload_dir = wp_upload_dir();
$um_dir = $upload_dir['basedir'] . '/ultimatemember';
if (!is_dir($um_dir)) {
wp_mkdir_p($um_dir);
}
if (!is_writable($um_dir)) {
echo '<div class="notice notice-error"><p>';
printf('Ultimate Member: アップロードディレクトリ (%s) への書き込み権限がありません。', esc_html($um_dir));
echo '</p></div>';
}
});
// ④ プロフィール更新後にキャッシュをクリア
add_action('um_after_user_updated', function(int $user_id): void {
delete_transient('um_profile_' . $user_id);
clean_user_cache($user_id);
});
ステップ4:カスタムフィールドとロールを管理する
# カスタムフィールドとロール確認
wp eval "
// UMフォームを確認
\$forms = get_posts([
'post_type' => 'um_form',
'posts_per_page' => 10,
'post_status' => 'publish',
]);
echo 'Total UM forms: ' . count(\$forms) . PHP_EOL;
foreach (\$forms as \$form) {
\$mode = get_post_meta(\$form->ID, '_um_mode', true);
printf(' Form #%d: %s | Mode: %s' . PHP_EOL,
\$form->ID, \$form->post_title, \$mode
);
}
// UMロールを確認
\$roles = get_option('um_roles', []);
echo 'UM roles defined: ' . count(\$roles) . PHP_EOL;
foreach (\$roles as \$role_key => \$role) {
printf(' Role: %s | Default: %s | Can upload: %s' . PHP_EOL,
\$role_key,
(\$role['is_default'] ?? false) ? 'yes' : 'no',
(\$role['can_upload_cover_picture'] ?? false) ? 'yes' : 'no'
);
}
"
ステップ5:ロールベースのコンテンツ制限を設定する
// functions.php: ロールベース制限
// ① UMロールに基づいてメニューを制御
add_filter('wp_nav_menu_objects', function(array $items, object $args): array {
foreach ($items as $key => $item) {
$required_role = get_post_meta($item->ID, '_menu_item_um_role', true);
if (empty($required_role)) continue;
if (!is_user_logged_in()) {
unset($items[$key]);
continue;
}
// UMロールを確認
$user_roles = get_user_meta(get_current_user_id(), 'um_user_roles', true);
if (!in_array($required_role, (array) $user_roles, true)) {
unset($items[$key]);
}
}
return $items;
}, 10, 2);
// ② ページへのアクセスをUMロールで制限
add_action('template_redirect', function(): void {
if (!is_page()) return;
$restricted_role = get_post_meta(get_the_ID(), '_um_access_role', true);
if (empty($restricted_role)) return;
if (!is_user_logged_in()) {
wp_redirect(um_get_core_page('login'));
exit;
}
$user_roles = get_user_meta(get_current_user_id(), 'um_user_roles', true);
if (!in_array($restricted_role, (array) $user_roles, true)) {
wp_die('このページにアクセスする権限がありません。', 403);
}
});
// ③ 未ログインユーザーをリダイレクト
add_action('um_before_profile_template', function(): void {
if (!is_user_logged_in() && UM()->options()->get('require_login') === '1') {
wp_redirect(um_get_core_page('login'));
exit;
}
});
注意事項
- Ultimate Memberのプロフィール画像アップロードが失敗する場合は、
php.iniのupload_max_filesizeとpost_max_sizeも合わせて確認してください。プラグイン側のフィルターだけでは不十分でPHPレベルの制限が優先されます - カスタムフィールドがフロントエンドに表示されない場合は、フォームのフィールド設定で「登録フォーム」「プロフィールフォーム」それぞれに個別にフィールドを追加する必要があります。フォームを共有していない限り設定が引き継がれません
- Ultimate Memberのページ(登録・ログイン・プロフィール)を削除・再作成すると「WooCommerce → 設定 → 詳細 → ページ設定」と同様にUM設定でページを再設定する必要があります
まとめ
Ultimate Member修復は①um_settingsオプションで承認設定・メール有効化・デフォルトロールを確認・保留中ユーザーを特定、②um_after_user_registerフックでメタ設定・ウェルカムメール送信・um_registration_validate_fieldsで禁止ユーザー名をバリデーション、③um_profile_photo_max_sizeフィルターで5MBに拡大・アップロードディレクトリのパーミッション確認・um_after_user_updatedでキャッシュクリア、④um_form投稿でフォーム一覧・um_rolesでロール設定を確認、⑤wp_nav_menu_objectsフィルターでUMロールベースのメニュー制御・template_redirectでページアクセス制限する手順で解決します。