Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 1c9aa7e

Browse files
authored
Offline Mode: Switch to wp.editPost and wp.newPost (#792)
2 parents db1acee + 03c1170 commit 1c9aa7e

File tree

3 files changed

+41
-25
lines changed

3 files changed

+41
-25
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,22 @@ _None._
3030
3131
-->
3232

33+
## Unreleased
34+
35+
### New Features
36+
37+
- Add `getPost(withID)` to `PostServiceRemoteExtended` [#785]
38+
- Add support for metadata to `PostServiceRemoteExtended` [#783]
39+
40+
### Bug Fixes
41+
42+
- Fix encoding for some fields in the new XMLRPC endpoints [#786]
43+
44+
### Internal Changes
45+
46+
- Update new APIs to create and update posts introduced `PostServiceRemoteExtended` to use `wp.newPost` and `wp.editPost` instead of the older versions of these APIs [#792]
47+
48+
3349
## 17.0.0
3450

3551
### Breaking Changes

Sources/WordPressKit/Models/RemotePostParameters.swift

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ extension RemotePostCreateParameters {
115115
if previous.tags != tags {
116116
changes.tags = tags
117117
}
118-
if previous.categoryIDs != categoryIDs {
118+
if Set(previous.categoryIDs) != Set(categoryIDs) {
119119
changes.categoryIDs = categoryIDs
120120
}
121121
if previous.metadata != metadata {
@@ -330,22 +330,23 @@ private enum RemotePostXMLRPCCodingKeys: String, CodingKey {
330330
case ifNotModifiedSince = "if_not_modified_since"
331331
case type = "post_type"
332332
case postStatus = "post_status"
333-
case date = "date_created_gmt"
334-
case authorID = "wp_author_id"
335-
case title
336-
case content = "description"
337-
case password = "wp_password"
338-
case excerpt = "mt_excerpt"
339-
case slug = "wp_slug"
340-
case featuredImageID = "wp_post_thumbnail"
341-
case parentPageID = "wp_page_parent_id"
342-
case tags = "mt_keywords"
343-
case format = "wp_post_format"
333+
case date = "post_date"
334+
case authorID = "post_author"
335+
case title = "post_title"
336+
case content = "post_content"
337+
case password = "post_password"
338+
case excerpt = "post_excerpt"
339+
case slug = "post_name"
340+
case featuredImageID = "post_thumbnail"
341+
case parentPageID = "post_parent"
342+
case terms = "terms"
343+
case termNames = "terms_names"
344+
case format = "post_format"
344345
case isSticky = "sticky"
345-
case categoryIDs = "categories"
346346
case metadata = "custom_fields"
347347

348-
static let postTags = "post_tag"
348+
static let taxonomyTag = "post_tag"
349+
static let taxonomyCategory = "category"
349350
}
350351

351352
struct RemotePostCreateParametersXMLRPCEncoder: Encodable {
@@ -376,10 +377,10 @@ struct RemotePostCreateParametersXMLRPCEncoder: Encodable {
376377
// Posts
377378
try container.encodeIfPresent(parameters.format, forKey: .format)
378379
if !parameters.tags.isEmpty {
379-
try container.encode(parameters.tags, forKey: .tags)
380+
try container.encode([RemotePostXMLRPCCodingKeys.taxonomyTag: parameters.tags], forKey: .termNames)
380381
}
381382
if !parameters.categoryIDs.isEmpty {
382-
try container.encodeIfPresent(parameters.categoryIDs, forKey: .categoryIDs)
383+
try container.encode([RemotePostXMLRPCCodingKeys.taxonomyCategory: parameters.categoryIDs], forKey: .terms)
383384
}
384385
if parameters.isSticky {
385386
try container.encode(parameters.isSticky, forKey: .isSticky)
@@ -422,14 +423,16 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable {
422423
// Posts
423424
try container.encodeStringIfPresent(parameters.format, forKey: .format)
424425
if let tags = parameters.tags {
425-
try container.encode(tags, forKey: .tags)
426+
try container.encode([RemotePostXMLRPCCodingKeys.taxonomyTag: tags], forKey: .termNames)
427+
}
428+
if let categoryIDs = parameters.categoryIDs {
429+
try container.encode([RemotePostXMLRPCCodingKeys.taxonomyCategory: categoryIDs], forKey: .terms)
426430
}
427-
try container.encodeIfPresent(parameters.categoryIDs, forKey: .categoryIDs)
428431
try container.encodeIfPresent(parameters.isSticky, forKey: .isSticky)
429432
}
430433
}
431434

432-
struct RemotePostUpdateParametersXMLRPCMetadata: Encodable {
435+
private struct RemotePostUpdateParametersXMLRPCMetadata: Encodable {
433436
let id: String?
434437
let key: String?
435438
let value: String?

Sources/WordPressKit/Services/PostServiceRemoteXMLRPC+Extended.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ extension PostServiceRemoteXMLRPC: PostServiceRemoteExtended {
1919
public func createPost(with parameters: RemotePostCreateParameters) async throws -> RemotePost {
2020
let dictionary = try makeParameters(from: RemotePostCreateParametersXMLRPCEncoder(parameters: parameters))
2121
let parameters = xmlrpcArguments(withExtra: dictionary) as [AnyObject]
22-
let response = try await api.call(method: "metaWeblog.newPost", parameters: parameters).get()
22+
let response = try await api.call(method: "wp.newPost", parameters: parameters).get()
2323
guard let postID = (response.body as? NSObject)?.numericValue() else {
2424
throw URLError(.unknown) // Should never happen
2525
}
@@ -28,11 +28,8 @@ extension PostServiceRemoteXMLRPC: PostServiceRemoteExtended {
2828

2929
public func patchPost(withID postID: Int, parameters: RemotePostUpdateParameters) async throws -> RemotePost {
3030
let dictionary = try makeParameters(from: RemotePostUpdateParametersXMLRPCEncoder(parameters: parameters))
31-
var parameters = xmlrpcArguments(withExtra: dictionary) as [AnyObject]
32-
if parameters.count > 0 {
33-
parameters[0] = postID as NSNumber
34-
}
35-
let result = await api.call(method: "metaWeblog.editPost", parameters: parameters)
31+
let parameters = xmlrpcArguments(withExtraDefaults: [postID as NSNumber], andExtra: dictionary) as [AnyObject]
32+
let result = await api.call(method: "wp.editPost", parameters: parameters)
3633
switch result {
3734
case .success:
3835
return try await post(withID: postID)

0 commit comments

Comments
 (0)