| | |
| | | |
| | | $results = []; |
| | | $errors = []; |
| | | $success = []; |
| | | $timelineParents = []; |
| | | $timelineStatus = []; |
| | | $timelineSharedFields = []; |
| | | $newPostsMap = []; |
| | | |
| | | foreach ($posts as $id => $postData) { |
| | | try { |
| | |
| | | ]); |
| | | |
| | | if (!$newId || is_wp_error($newId)) { |
| | | $errors[$id] = 'Could not create post'; |
| | | $progress->failItem($id, 'Could not create post'); |
| | | continue; |
| | | } |
| | | |
| | | $newPostsMap[$id] = $newId; |
| | | $this->savePostFields($newId, $postData); |
| | | $results[$id] = [ |
| | | 'success' => true, |
| | | 'new_id' => $newId, |
| | | 'processed_fields' => array_keys($postData) |
| | | ]; |
| | | $success[$newId] = array_keys($postData); |
| | | $progress->advance(); |
| | | continue; |
| | | } |
| | |
| | | |
| | | $this->savePostFields((int)$id, $postData); |
| | | |
| | | |
| | | if (Features::forContent($content)->has('is_timeline')) { |
| | | $post = get_post((int)$id); |
| | | $parentId = $post->post_parent > 0 ? $post->post_parent : $post->ID; |
| | |
| | | } |
| | | } |
| | | } |
| | | $results[$id] = [ |
| | | 'success' => true, |
| | | 'processed_fields' => array_keys($postData) |
| | | ]; |
| | | $progress->advance(); |
| | | |
| | | $success[$id] = array_keys($postData); |
| | | $progress->advance(); |
| | | } catch (Exception $e) { |
| | | $progress->failItem($id, $e->getMessage()); |
| | | $errors[$id] = $e->getMessage(); |
| | | $results[$id] = [ |
| | | 'success' => false, |
| | | 'error' => $e->getMessage() |
| | | ]; |
| | | } |
| | | } |
| | | |
| | |
| | | $outcome = count($errors) === count($posts) ? 'failed' : 'partial'; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | return new Result( |
| | | outcome: $outcome, |
| | | result: [ |
| | | 'posts' => $results, |
| | | 'posts' => $success, |
| | | 'errors' => $errors, |
| | | 'updated_count' => count(array_filter($results, fn($r) => $r['success'] ?? false)), |
| | | 'new_posts' => $newPostsMap, |
| | | 'updated_count' => count($success), |
| | | 'failed_count' => count($errors) |
| | | ] |
| | | ); |
| | |
| | | return true; |
| | | } |
| | | |
| | | $meta = Meta::forPost($postId); |
| | | $meta->setAll($allowedFields); |
| | | return true; |
| | | return Meta::forPost($postId) |
| | | ->setAll($allowedFields) |
| | | ->save(); |
| | | } |
| | | |
| | | // ───────────────────────────────────────────────────────────── |
| | |
| | | foreach ($posts as $index => $post) { |
| | | $meta = Meta::forPost($post->ID); |
| | | if ($index === 0) { |
| | | $meta->set('timeline', '', false); |
| | | $meta->set('timeline', ''); |
| | | $previousPost = $post; |
| | | continue; // Parent has no timeline |
| | | } |
| | |
| | | if ($timeline) { |
| | | $termId = $this->getOrCreateTerm($timeline, 'timeline'); |
| | | if ($termId) { |
| | | $success = $meta->set('timeline', $termId, false); |
| | | $success = $meta->set('timeline', $termId); |
| | | } |
| | | } |
| | | } |
| | |
| | | if ($lastKey === $index) { |
| | | $latestTimestamp = strtotime($post->post_date); |
| | | } |
| | | |
| | | $meta->save(); |
| | | $previousPost = $post; |
| | | } |
| | | |