Skip to content

Commit 3e5f5e6

Browse files
authored
Fix an issue with parent page ID removal (#796)
2 parents d95c88b + 1a0955f commit 3e5f5e6

File tree

2 files changed

+17
-20
lines changed

2 files changed

+17
-20
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ _None._
4141
### Bug Fixes
4242

4343
- Fix encoding for some fields in the new XMLRPC endpoints [#786]
44+
- Fix an issue with parent page removal in new `PostServiceRemoteExtended` [#796]
4445

4546
### Internal Changes
4647

Sources/WordPressKit/Models/RemotePostParameters.swift

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,7 @@ struct RemotePostCreateParametersWordPressComEncoder: Encodable {
219219
}
220220

221221
// Pages
222-
if let parentPageID = parameters.parentPageID {
223-
try container.encodeIfPresent(parentPageID, forKey: .parentPageID)
224-
}
222+
try container.encodeIfPresent(parameters.parentPageID, forKey: .parentPageID)
225223

226224
// Posts
227225
try container.encodeIfPresent(parameters.format, forKey: .format)
@@ -297,12 +295,7 @@ struct RemotePostUpdateParametersWordPressComEncoder: Encodable {
297295
try container.encodeIfPresent(parameters.excerpt, forKey: .excerpt)
298296
try container.encodeIfPresent(parameters.slug, forKey: .slug)
299297
if let value = parameters.featuredImageID {
300-
if let featuredImageID = value {
301-
try container.encode(featuredImageID, forKey: .featuredImageID)
302-
} else {
303-
// Passing `null` doesn't work.
304-
try container.encode("", forKey: .featuredImageID)
305-
}
298+
try container.encodeNullableID(value, forKey: .featuredImageID)
306299
}
307300
if let metadata = parameters.metadata, !metadata.isEmpty {
308301
let metadata = metadata.map(RemotePostUpdateParametersWordPressComMetadata.init)
@@ -311,7 +304,7 @@ struct RemotePostUpdateParametersWordPressComEncoder: Encodable {
311304

312305
// Pages
313306
if let parentPageID = parameters.parentPageID {
314-
try container.encodeIfPresent(parentPageID, forKey: .parentPageID)
307+
try container.encodeNullableID(parentPageID, forKey: .parentPageID)
315308
}
316309

317310
// Posts
@@ -370,9 +363,7 @@ struct RemotePostCreateParametersXMLRPCEncoder: Encodable {
370363
}
371364

372365
// Pages
373-
if let parentPageID = parameters.parentPageID {
374-
try container.encodeIfPresent(parentPageID, forKey: .parentPageID)
375-
}
366+
try container.encodeIfPresent(parameters.parentPageID, forKey: .parentPageID)
376367

377368
// Posts
378369
try container.encodeIfPresent(parameters.format, forKey: .format)
@@ -403,12 +394,7 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable {
403394
try container.encodeStringIfPresent(parameters.excerpt, forKey: .excerpt)
404395
try container.encodeStringIfPresent(parameters.slug, forKey: .slug)
405396
if let value = parameters.featuredImageID {
406-
if let featuredImageID = value {
407-
try container.encode(featuredImageID, forKey: .featuredImageID)
408-
} else {
409-
// Passing `null` doesn't work.
410-
try container.encode("", forKey: .featuredImageID)
411-
}
397+
try container.encodeNullableID(value, forKey: .featuredImageID)
412398
}
413399
if let metadata = parameters.metadata, !metadata.isEmpty {
414400
let metadata = metadata.map(RemotePostUpdateParametersXMLRPCMetadata.init)
@@ -417,7 +403,7 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable {
417403

418404
// Pages
419405
if let parentPageID = parameters.parentPageID {
420-
try container.encodeIfPresent(parentPageID, forKey: .parentPageID)
406+
try container.encodeNullableID(parentPageID, forKey: .parentPageID)
421407
}
422408

423409
// Posts
@@ -449,4 +435,14 @@ private extension KeyedEncodingContainer {
449435
guard let value else { return }
450436
try encode(value ?? "", forKey: key)
451437
}
438+
439+
/// - note: Some IDs are passed as integers, but, to reset them, you need to pass
440+
/// an empty string (passing `nil` does not work)
441+
mutating func encodeNullableID(_ value: Int?, forKey key: Key) throws {
442+
if let value {
443+
try encode(value, forKey: key)
444+
} else {
445+
try encode("", forKey: key)
446+
}
447+
}
452448
}

0 commit comments

Comments
 (0)