【问题标题】:Swift Wordpress Posts Fetch PageSwift Wordpress 帖子获取页面
【发布时间】:2022-01-13 16:39:49
【问题描述】:

我是编程和 swift 的初学者。我正在为我的小型企业开发一个应用程序。它几乎完成了,但我完全被博客页面困住了。我只想从我的 wordpress 网站中获取数据,然后将我的帖子放入我的 tableview 中。我正在搜索,但找不到正确的答案。请至少告诉我从哪里开始

谢谢

【问题讨论】:

  • 您的问题有点含糊。你能告诉我们你的代码吗?您是否只是尝试加载代码并在布局中显示它?有很多库用于提取 wordpress 数据。
  • 问题是我没有任何代码,因为我无法想象我应该采取的方式。

标签: ios wordpress swift


【解决方案1】:

您需要使用 WordPress 的新 API,称为 WP REST API,它将以 JSON 格式为您提供所需的所有数据。看看这个网址开始: http://v2.wp-api.org/

在您的 WordPress 网站中使用这个官方插件: https://wordpress.org/plugins/rest-api/

更新:您不需要安装上述插件,因为它已从 v4.4 合并到 WordPress 核心中。

【讨论】:

    【解决方案2】:

    首先,您应该定义解析 JSON 响应的模型,例如,如下所示。

    import Foundation
    
    struct Title: Decodable {
    
        let rendered: String
    
    }
    
    struct Content: Decodable {
    
        let rendered: String
    
    }
    
    struct WPFeaturedMedia: Decodable {
    
        let sourceURLString: String
    
        var url: URL? {
            .init(string: sourceURLString)
        }
    
        enum CodingKeys: String, CodingKey {
            case sourceURLString = "source_url"
        }
    
    }
    
    struct Embedded: Decodable {
    
        let medias: [WPFeaturedMedia]?
    
        enum CodingKeys: String, CodingKey {
            case medias = "wp:featuredmedia"
        }
    
    }
    
    struct PostHeader: Decodable, Identifiable {
    
        let id: Int
    
        let date: Date
        let title: Title
        let embedded: Embedded
    
        enum CodingKeys: String, CodingKey {
            case date = "date"
            case title = "title"
            case embedded = "_embedded"
            case id = "id"
        }
    
    }
    
    struct Post: Decodable, Identifiable {
    
        let id: Int
    
        let date: Date
        let title: Title
        let content: Content
        let embedded: Embedded
    
        enum CodingKeys: String, CodingKey {
            case date = "date"
            case title = "title"
            case content = "content"
            case embedded = "_embedded"
            case id = "id"
        }
    
    }
    
    

    您可以使用Combine 轻松获取帖子。

    import Combine
    import SwiftUI
    
    final class ViewModel: ObservableObject {
    
            @Published var postHeaders: [PostHeader] = []
            @Published var error: Error?
    
            private var cancellable: AnyCancellable?
    
            init() {
                let url = URL(string: "https://PUT_YOUR_HOST_HERE/wp-json/wp/v2/posts?_fields=id,date,title,_links,_embedded&_embed”)!
    
                cancellable = URLSession.shared.dataTaskPublisher(for: url)
                    .map { $0.data }
                    .decode(type: [PostHeader].self, decoder: JSONDecoder())
                    .receive(on: DispatchQueue.main)
                    .sink(
                        receiveCompletion: { completion in
                            switch completion {
                            case .failure(let error):
                                self.error = error
                            case .finished:
                                break
                            }
                        },
                        receiveValue: { posts in
                            self.postHeaders = posts
                        }
                    )
            }
    }
    
    

    您可以在这里找到完整的资源:@​​987654321@

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多