function glsr_reassign_reviews(int $assignedPostId = 0, array $newAssignedPostIds = [], int $per_page = 100)
{
// set_time_limit(0); // Uncomment only if necessary
$delay_ms = 5000;
$newAssignedPostIds = array_filter($newAssignedPostIds, 'is_numeric');
$processed = 0;
$resumeKey = "glsr_reassign_reviews_last_page_{$assignedPostId}";
$stream_reviews = function (int $assignedPostId, int $start_page, int $per_page) use ($resumeKey): \Generator
{
$page = max(1, $start_page);
while (true) {
$reviews = glsr_get_reviews([
'assigned_posts' => $assignedPostId,
'orderby' => 'ID',
'page' => $page,
'per_page' => max(1, $per_page),
]);
if (1 === $page && empty($reviews->reviews)) {
break;
}
if ($page >= $reviews->max_num_pages) {
break;
}
foreach ($reviews->reviews as $review) {
yield $review->ID;
}
$page++;
update_option($resumeKey, $page);
}
}
$last_page = get_option($resumeKey, 1);
foreach ($stream_reviews($assignedPostId, $last_page, $per_page) as $reviewId) {
glsr_update_review($reviewId, [
'assigned_posts' => $newAssignedPostIds,
]);
$processed++;
if ($processed % 200 === 0) {
glsr_log("Processed {$processed} reviews");
usleep($delay_ms); // delay every 200 reviews to reduce server load
}
}
glsr_log("Finished processing {$processed} reviews");
delete_option($resumeKey);
}