Warenwirtschaft: AP-38 — Status-Cron selbstheilend einplanen (Ursache Ampel-Bug)

Shopseitige Diagnose (SSH, 28.08.): der Hook partnercenter_api_fetch_orders_status
war in WP-Cron GAR NICHT eingeplant (grep leer), obwohl WP-Cron läuft (System-Cron
trifft wp-cron.php alle 5 Min, DISABLE_WP_CRON=1 korrekt kompensiert). Damit pollte
nichts /api/wp/status → jede abgeschlossene Bestellung blieb auf 'open' = orange.

Ursache: Der Event wurde nur im register_activation_hook eingeplant und im
Deaktivierungs-Hook gelöscht. Ein In-Place-Update (ohne Reaktivierung) ließ ihn
dauerhaft verschwinden.

Fix (Connector v1.6.0): partnercenter_api_ensure_cron() auf 'init' — plant den
stündlichen Event nach, falls er fehlt (wp_next_scheduled-Guard). Selbstheilend,
übersteht künftige Updates.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-08-28 11:07:09 +00:00
parent 0c8d321f66
commit b6ca33288c

View file

@ -42,6 +42,26 @@ function partnercenter_api_activate()
}
register_activation_hook(__FILE__, 'partnercenter_api_activate');
/**
* AP-38: Selbstheilung des Status-Cron.
*
* Der stündliche Status-Abgleich wurde bisher NUR bei der Plugin-Aktivierung
* eingeplant. Nach einem In-Place-Update (ohne echte Deaktivierung + Reaktivierung)
* fehlte der Event dauerhaft — es lief keine Statusabfrage mehr, und die Ampel
* blieb bei abgeschlossenen Bestellungen orange. Hier bei jedem Request prüfen und
* bei Bedarf nachplanen (wp_next_scheduled ist billig, wp_schedule_event feuert nur,
* wenn der Event fehlt).
*
* @since 1.6.0
*/
function partnercenter_api_ensure_cron()
{
if (! wp_next_scheduled('partnercenter_api_fetch_orders_status')) {
wp_schedule_event(time(), 'hourly', 'partnercenter_api_fetch_orders_status');
}
}
add_action('init', 'partnercenter_api_ensure_cron');
/**
* Function to run after plugin deactivation
*