From 72d237a066c6c688330090c34ed8d8a900c7a58c Mon Sep 17 00:00:00 2001 From: Malin Date: Fri, 20 Feb 2026 08:22:40 +0100 Subject: [PATCH] fix: extract subscriber ID from nested data field in phpList response phpList REST API v3 returns subscriber data wrapped in a "data" key: {"status":"success","type":"Subscriber","data":{"id":"2400",...}} Both subscriber_get_by_email and subscriber_add responses are now read as response['data']['id'] with a fallback to response['id'] for compatibility. Previously the code checked only response['id'] (top level), found nothing, and reported failure even though the subscriber was created successfully. Co-Authored-By: Claude Sonnet 4.6 --- woolist-phplist/includes/class-woolist-api.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/woolist-phplist/includes/class-woolist-api.php b/woolist-phplist/includes/class-woolist-api.php index 3cfe483..050091b 100644 --- a/woolist-phplist/includes/class-woolist-api.php +++ b/woolist-phplist/includes/class-woolist-api.php @@ -179,8 +179,10 @@ class WooList_API { $subscriber_id = null; $existing = $this->subscriber_get_by_email( $email ); - if ( ! is_wp_error( $existing ) && ! empty( $existing['id'] ) ) { - $subscriber_id = (int) $existing['id']; + // phpList wraps subscriber data inside a "data" key: {"status":"success","data":{"id":…}} + $existing_id = $existing['data']['id'] ?? $existing['id'] ?? null; + if ( ! is_wp_error( $existing ) && ! empty( $existing_id ) ) { + $subscriber_id = (int) $existing_id; WooList_Logger::debug( 'Found existing subscriber id=' . $subscriber_id . ' email=' . $email ); } else { // Step 2: create a new subscriber. @@ -192,7 +194,9 @@ class WooList_API { return [ 'success' => false, 'subscriber_id' => null ]; } - $subscriber_id = isset( $added['id'] ) ? (int) $added['id'] : null; + // phpList wraps the new subscriber inside a "data" key. + $subscriber_id = isset( $added['data']['id'] ) ? (int) $added['data']['id'] + : ( isset( $added['id'] ) ? (int) $added['id'] : null ); if ( $subscriber_id ) { WooList_Logger::info( 'Created new subscriber id=' . $subscriber_id . ' email=' . $email );