2013-11-25 157 views
1

如果我不是以最好的方式描述場景,我會提前道歉,但我會盡我所能。將WordPress集成到PHP網站

我有一個電子商務(ISH)網站。我們希望將博客整合到現有的PHP(MVC)框架中。

我使用

define('WP_USE_THEMES', FALSE); 
require('/wpengine/wp-blog-header.php'); 

一個名爲「wpengine」 subfoler下我已經WordPress的安裝,但想調用WP功能來呈現從自定義控制器的主題,所以我可以將呈現的內容進入一個頁面,因爲我需要它。

是否有一個WordPress功能,我可以通過GET參數來渲染內容,因爲wordpress通常會這樣做?

也許這將有助於說明什麼,我希望做

->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 
+0

定義「按照WP通常的方式呈現內容」...(如果這是我的想法,你需要閱讀很多東西,或者你需要聘請某人,因爲它不是5行解釋。) –

+0

對不起,不清楚。我希望WP將模板文件放在一起,並將HTML作爲變量直接輸出到屏幕。這樣我就可以根據需要將「呈現」,或者說,「組裝」的內容從wordpress注入到頁面中。 – Ben

回答

1

使用的假設條件如下設置:

  • 一個MVC控制器/,捕捉一切除了/blog
  • WP服務/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獲取/wp/wherever,並根據需要返回str_replace() URI。 (你也可以使用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(); 
} 

在上面幾點:

  1. $_GET,$_POST,$_COOKIE$_REQUEST全部得到削減,以及 - 等待它! - $_SERVER。他們偶爾也會改變。因此,如果您在請求處理中進一步依賴它們,請注意觀察。在處理WP之前,備份您可能關心的任何信息。

  2. 由於您的MVC需要未分類的數據,而不是WP的斜線數據,並且由於除了WP註冊的註冊操作之外您還可能註冊關閉操作,所以如果涉及任何數據庫查詢。要非常警惕的安全考慮,如果你決定要備份和恢復他們在WP被解僱之前的狀態超全局變量,因爲WP和插件實際上可以做對即關閉掛鉤發出查詢。

  3. 不用說,您仍然需要自定義主題。一個沒有頁眉,頁腳或邊欄。亞達,亞達。

  4. 萬一它很重要,有些插件在無法訪問自己喜歡的全局變量時會中斷;事實上,許多人都這麼做。一些插件也啓動輸出緩衝區;沒有那麼多,但當你終止輸出緩衝區時,你仍然需要小心。

  5. WP和相當少量的插件(大部分,但不僅僅是緩存和反垃圾郵件相關)可能會更改某些標頭,偶爾也會導致錯誤或不正確。因此,如果他們選擇的選項與您自己的緩存選項衝突,那麼請注意這一方面。特別是當涉及到cookies時。說到緩存,你必然需要推出自己的產品:輸出已經開始 - 即使它在緩衝區中 - 到WP開始時,插件將全部緩存在關機鉤上。

  6. 如果您需要WP服務任意頁面,使WP_HOME指向站點的根文件夾,而是和它應該工作...

我會兩個環節中更多的靈感總結事件我做的不好,在阻止你去嘗試: