[英]Integrating WordPress into PHP website
如果我沒有以最好的方式描述這種情況,我事先表示歉意,但我會盡力而為。
我有一個電子商務(ish)網站。 我們希望將博客集成到現有的PHP(MVC)框架中。
我在用
define('WP_USE_THEMES', FALSE);
require('/wpengine/wp-blog-header.php');
我已經在名為“ wpengine”的子文件夾下安裝了WordPress,但想調用WP函數從自定義控制器渲染主題,因此我可以根據需要將渲染的內容放入頁面中。
是否有一個WordPress函數,我可以像WordPress那樣傳遞GET參數來呈現內容?
也許這將有助於描述我要做什么
->Page Request
---> Loads custom framework
---> Builds custom view
---> Gets content from WP via function call ( rendered category, post, or page )
---> Injects content from WP into view
-> Returns page
使用以下設置進行假設:
/
中的MVC控制器可捕獲/blog
以外的所有內容 /blog
/wp
WP文件 在wp / wp-config.php文件中,添加:
define('WP_HOME', 'http://example.com/blog'); # important! no trailing slash
define('WP_SITEURL', 'http://example.com/wp'); # important! no trailing slash
這是使WP在其文件夾外工作時使很多魔術發生的兩個常量。 而且事情會工作或多或少開箱上述內容,前提是你定制的主題,除了要包在視圖中WP輸出的事實。
一些偽代碼可將您帶到您想要去的地方...(撿起毒葯)...
第一種方法是遠程獲取WP:
function http_fetch_the_wp_mess() {
$request = remote_fetch('http://path/to/wp/wherever');
extract_and_process_headers($request);
return extract_and_process_content($request);
}
第一種方法的好處是它相當干凈而且沒有風險。 您可以使用http和str_replace()
URI在返回給您的內容中獲取/wp/wherever
。 (您也可以使用ajax甚至是iframe來執行此操作。)WP可以使用沒有標題,頁腳或側邊欄的主題生活在自己的貧民區中,您應該一切順利。
另一種方法是包含WP,這要復雜得多 (一如既往,細節中是魔鬼):
function php_include_the_wp_mess() {
# Optionally:
# make_deep_copy_of_superglobals();
ob_start();
require '/path/to/wp/index.php';
# The meat of our procedure:
pray_that_nothing_gets_screwed_up_due_to_using_so_much_global_state();
# Optionally:
# cleanup_superglobals();
# cleanup_and_fix_headers();
return ob_end_clear_up_to_where_started_further_up();
}
以上幾點:
$_GET
, $_POST
, $_COOKIE
和$_REQUEST
都將被削減 ,以及-等待它! — $_SERVER
。 他們偶爾也會改變。 因此,如果您在請求處理中進一步依賴它們,請隨時注意。 在將其處理到WP之前,請備份您可能會關心的任何信息。
由於您的MVC希望使用未削減的數據(而不是WP的削減的數據),並且由於除了WP所注冊的那些操作之外,您可能還會注冊關閉操作,因此如果涉及數據庫查詢,則里程可能會有所不同。 如果您決定以WP被解雇之前的狀態備份和還原超全局變量,請特別注意安全性,因為WP和插件實際上可以並且確實會在該關閉掛鈎上發出查詢。
不用說,您仍然需要自定義主題。 沒有頁眉,頁腳或側邊欄的一種。 亞達亞達
萬一重要,某些插件在無法訪問自己喜歡的全局變量時會中斷; 實際上有很多。 一些插件還啟動輸出緩沖區; 數量不多,但是在終止輸出緩沖區時,您仍然需要警惕。
WP和相當少量的插件(大多數但不僅是與緩存和反垃圾郵件相關的插件)可能會更改某些標頭,有時這樣做的錯誤或不盡如人意。 因此,如果它們采用的選項與您自己的緩存選項沖突,請保持警惕。 特別是涉及Cookie時。
說到緩存,您肯定需要自己動手:在WP插入時,輸出已經開始-即使它在緩沖區中,並且所有插件都將緩存在shutdown鈎子上。
如果您需要使WP為任意頁面提供服務,請使WP_HOME
指向站點的根文件夾,它應該可以工作…
如果我在阻止您嘗試方面做得很差,我將通過兩個鏈接作為進一步啟發的結尾:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.