我目前正在開發(fā)我的第一個(gè) Wordpress 插件,我遇到了 REST API 的問題,我不太理解。也許有比我更好的方法,但我還沒有意識(shí)到,所以我很高興獲得任何幫助!這是交易:我正在創(chuàng)建一個(gè) API,該 API 應(yīng)該提供來自 Wordpress mysql 數(shù)據(jù)庫的緩存數(shù)據(jù)。我正在將數(shù)據(jù)(url、mime-type、[...])從網(wǎng)絡(luò)資源存儲(chǔ)到我想要提供服務(wù)的數(shù)據(jù)庫中。要緩存的資源在策略文件中定義,如下所示:政策.json{ "files": [ { "resource_url": "https://example.come/assets/images/image.png", (...) }, (...) ]}由于文件數(shù)量是動(dòng)態(tài)的,我的服務(wù)需要調(diào)整以適應(yīng)策略文件規(guī)定的任何自定義路由。例如,在上述情況下,它應(yīng)該通過我的 Wordpress 站點(diǎn)提供資源,該站點(diǎn)最初來自 example.com。因此,如果 有請(qǐng)求,則應(yīng)該提供https://my-wordpress-site.com/wp-json/example/v1/assets/images/image.png緩存的文件。https://example.come/assets/images/image.png我的 REST API 看起來像這樣:我的想法是,我創(chuàng)建一個(gè)可讀 (GET) 的其余路由,它接受其余 API 上的所有請(qǐng)求。一旦請(qǐng)求進(jìn)來,它就會(huì)被過濾器攔截rest_pre_serve_request,以檢查數(shù)據(jù)庫是否緩存了所請(qǐng)求的文件,如果緩存了,則提供該文件。這是我的方法:根據(jù)文檔,我可以簡(jiǎn)單地回顯來自過濾器的數(shù)據(jù)并返回true或false指示請(qǐng)求是否已得到服務(wù)。但就我而言,我還必須添加其他數(shù)據(jù),例如響應(yīng)的Status-Code和Content-Type,以便客戶端能夠正確處理它?,F(xiàn)在這是癥結(jié)所在。該邏輯的工作方式與我想要的完全一樣,并且它按照應(yīng)有的方式服務(wù)請(qǐng)求,但我仍然收到已從PHP發(fā)送警告的經(jīng)典標(biāo)頭,上面代碼中標(biāo)記了第 41 行和第 92 行。那么,我在這里做的事情有什么根本錯(cuò)誤嗎?或者也許有人知道如何正確處理保存的東西?我感謝您的幫助!!
1 回答

胡子哥哥
TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
我找到了解決我的問題的方法。
Wordpress 在 中具有默認(rèn)的 CORS 過濾器.../wp-includes/rest-api.php on line 596
,在此過濾器中 Wordpress 設(shè)置默認(rèn)標(biāo)頭以發(fā)送“帶有 API 請(qǐng)求的跨源資源共享標(biāo)頭”。(https://github.com/WordPress/wordpress-develop/blob/5.4/src/wp-includes/rest-api.php#L596)此過濾器以默認(rèn)優(yōu)先級(jí) (10) 添加到 REST API,因此我只是必須給我的自定義過濾器更高的優(yōu)先級(jí),以便讓它在默認(rèn) WP CORS 過濾器之后執(zhí)行。
add_filter('rest_pre_serve_request', 'serve_static_resources', 11, 4);
然后警告就消失了。
- 1 回答
- 0 關(guān)注
- 125 瀏覽
添加回答
舉報(bào)
0/150
提交
取消