WordPress, 實用技巧

JetEngine 的 Query Builder 自訂欄位的 REST API 查詢

JetEngine 的 Query Builder 自訂欄位的 REST API 查詢

當我們使用 WordPress 搭配 JetEngine 來建置動態的網站時,當你進階使用 API 去取得另一個 WP 網站資料時,你會發現有一些自訂的欄位的值雖然有回傳,也看得到,但卻無法依照這樣去查詢,例如今天我們自訂了一個欄位叫做 temple-god-api,這是透過 API 回傳一間廟宇的供奉主神欄位,API 是呼叫得到,但是我必須要在專屬介紹頁面之中列出跟這個主神有關的廟宇,廟宇那端的 API 是擁有這個主神的廟參數,我必須要動態的產生對應的主神廟宇,因此產生了這個問題,如果今天沒有特別去針對這個 KEY 去擴充為可查詢的屬性,就會一直無法呼叫。

在這篇文章中,我將介紹如何使用 JetEngine 的 Query Builder 與 WordPress 的 add_filter 函數,來實現這一目的。這將是一個針對「台灣寺廟」相關數據的查詢範例,其中涉及一個名為 ‘temple-god-api’ 的自訂欄位。

問題背景

在 JetEngine 的 Query Builder 中,儘管我們可以輕易地建立查詢並回傳 API 數據,但這不代表所有自訂欄位都能被直接查詢。這是因為 REST API 預設並不支援所有自訂欄位的查詢。因此,當我們需要根據自訂欄位進行篩選時,就需要進一步的設定。

解決方案

我們可以透過 WordPress 的 add_filter 函數來擴充 REST API 的查詢功能。以下是這個解決方案的程式碼範例:

add_filter( 'rest_taiwan-temple_query', function( $args, $request ) {
    if ( ! empty( $request['temple-god-api'] ) ) {
        $args['meta_query'] = array(
            array(
                'key' => 'temple-god-api',
                'value' => $request['temple-god-api'],
                'compare' => '='
            )
        );
    }
    return $args;
}, 10, 2);

這段程式碼對 ‘rest_taiwan-temple_query’ 進行了過濾。當 API 請求中包含 ‘temple-god-api’ 參數時,它會將這個參數加入到查詢條件(meta_query)中。這樣一來,我們就能根據這個自訂欄位來進行篩選了。

實踐意義

透過這種方式,我們不僅擴充了 JetEngine Query Builder 的功能,也讓我們的 REST API 查詢變得更加靈活和強大。對於需要根據特定自訂欄位進行數據篩選的網站來說,這是一個非常實用的技巧。

透過上述的方法,我們可以看到,即使是在複雜的 WordPress 環境中,透過合適的技術手段,我們依然能夠實現高度客製化的數據查詢。這不僅提升了網站的功能性,也為使用者提供了更豐富、更精準的資訊。