argument('file')); if (!file_exists($filePath)) { $this->error("File not found: {$filePath}"); return 1; } $data = json_decode(file_get_contents($filePath), true); // 只處理董事會和執行成員 $members = array_filter($data, function($item) { $categories = array_column($item['categories'] ?? [], 'slug'); return in_array('board-member', $categories) || in_array('executive', $categories); }); $this->info("Found " . count($members) . " members to import"); $imported = 0; $failed = 0; DB::transaction(function () use ($members, &$imported, &$failed) { $bar = $this->output->createProgressBar(count($members)); $bar->start(); foreach ($members as $item) { try { // 決定成員類型 $memberType = $this->determineMemberType($item); $acfFields = $item['acf_fields'] ?? []; // 創建董事會成員 $member = BoardMember::create([ 'name' => $acfFields['name'] ?? $item['title'], 'slug' => $item['slug'] ?: Str::slug($acfFields['name'] ?? $item['title']), 'title' => $acfFields['title'] ?? null, 'positions' => $acfFields['positions'] ?? null, 'text' => $acfFields['text'] ?? $item['content'] ?? null, 'portrait_url' => $acfFields['portrait'] ?? null, 'sort' => (int)($acfFields['sort'] ?? 999), 'is_active' => $item['status'] === 'publish', 'member_type' => $memberType, 'wp_post_id' => $item['id'], 'acf_data' => $acfFields, // 保留完整 ACF 資料 ]); // 導入照片 (如果 portrait 是完整 URL) if (!empty($acfFields['portrait'])) { $member->importFromWordPress($acfFields); } $imported++; } catch (\Exception $e) { $this->warn("Failed to import member: " . ($acfFields['name'] ?? $item['title'] ?? 'Unknown')); $this->warn("Error: " . $e->getMessage()); $failed++; } $bar->advance(); } $bar->finish(); }); $this->newLine(2); $this->info('Import completed!'); $this->table( ['Metric', 'Count'], [ ['Total Members', count($members)], ['Successfully Imported', $imported], ['Failed', $failed], ['Board Members', BoardMember::board()->count()], ['Executives', BoardMember::executive()->count()], ] ); return 0; } private function determineMemberType(array $data): string { // 根據分類判斷 $categories = array_column($data['categories'] ?? [], 'slug'); if (in_array('executive', $categories)) { return 'executive'; } if (in_array('board-member', $categories)) { return 'board'; } return 'board'; } }