geminilabs

Untitled

Sep 30th, 2025 (edited)
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.77 KB | None | 0 0
  1. /**
  2.  * Example Usage: glsr_reassign_reviews(41098, [41098, 26907], 100);
  3.  */
  4. function glsr_reassign_reviews(int $assignedPostId = 0, array $newAssignedPostIds = [], int $per_page = 100): void
  5. {
  6.     // set_time_limit(0); // Uncomment only if necessary
  7.  
  8.     $delay_ms = 5000;
  9.     $newAssignedPostIds = array_filter($newAssignedPostIds, 'is_numeric');
  10.     $processed = 0;
  11.     $resumeKey = "glsr_reassign_reviews_last_page_{$assignedPostId}";
  12.  
  13.     $stream_reviews = function (int $assignedPostId, int $start_page, int $per_page) use ($resumeKey): \Generator
  14.     {
  15.         $page = max(1, $start_page);
  16.         while (true) {
  17.             $reviews = glsr_get_reviews([
  18.                 'assigned_posts' => $assignedPostId,
  19.                 'orderby' => 'ID',
  20.                 'page' => $page,
  21.                 'per_page' => max(1, $per_page),
  22.             ]);
  23.             if (1 === $page && empty($reviews->reviews)) {
  24.                 break;
  25.             }
  26.             if ($page >= $reviews->max_num_pages) {
  27.                 break;
  28.             }
  29.             foreach ($reviews->reviews as $review) {
  30.                 yield $review->ID;
  31.             }
  32.             $page++;
  33.             update_option($resumeKey, $page);
  34.         }
  35.     }
  36.  
  37.     $last_page = get_option($resumeKey, 1);
  38.  
  39.     foreach ($stream_reviews($assignedPostId, $last_page, $per_page) as $reviewId) {
  40.         glsr_update_review($reviewId, [
  41.             'assigned_posts' => $newAssignedPostIds,
  42.         ]);
  43.         $processed++;
  44.         if ($processed % 200 === 0) {
  45.             glsr_log("Reassigned {$processed} reviews");
  46.             usleep($delay_ms); // delay every 200 reviews to reduce server load
  47.         }
  48.     }
  49.  
  50.     glsr_log("Finished reassigning {$processed} reviews");
  51.     delete_option($resumeKey);
  52. }
Advertisement
Add Comment
Please, Sign In to add comment