簡體   English   中英

Swift Wordpress 帖子獲取頁面

[英]Swift Wordpress Posts Fetch Page

我是編程和快速的初學者。 我正在為我的小型企業開發一個應用程序。 它幾乎完成了,但我完全被博客頁面困住了。 我只想從我的 wordpress 網站中獲取數據,然后將我的帖子放到我的 tableview 中。 我正在搜索,但找不到正確的答案。 請至少我告訴我從哪里開始

謝謝

您需要使用稱為WP REST API的WordPress很棒的新API,它將以JSON格式提供您需要的所有數據。 看看這個網址開始: http : //v2.wp-api.org/

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

更新:您不需要安裝上述插件,因為它已從v4.4合並到WordPress核心中。

首先,您應該定義用於解析 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
                    }
                )
        }
}

你可以在這里找到完整的資源: https : //github.com/fuzzzlove/SwiftUIWordpressClient

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM