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 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 08:22:40 +01:00
parent 1c382f2cf4
commit 72d237a066

View File

@@ -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 );