簡體   English   中英

將WordPress集成到PHP網站

[英]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 以外的所有內容
  • 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和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();
}

以上幾點:

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

  2. 由於您的MVC希望使用未削減的數據(而不是WP的削減的數據),並且由於除了WP所注冊的那些操作之外,您可能還會注冊關閉操作,因此如果涉及數據庫查詢,則里程可能會有所不同。 如果您決定以WP被解雇之前的狀態備份和還原超全局變量,請特別注意安全性,因為WP和插件實際上可以並且確實會在該關閉掛鈎上發出查詢。

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

  4. 萬一重要,某些插件在無法訪問自己喜歡的全局變量時會中斷; 實際上有很多。 一些插件還啟動輸出緩沖區; 數量不多,但是在終止輸出緩沖區時,您仍然需要警惕。

  5. WP和相當少量的插件(大多數但不僅是與緩存和反垃圾郵件相關的插件)可能會更改某些標頭,有時這樣做的錯誤或不盡如人意。 因此,如果它們采用的選項與您自己的緩存選項沖突,請保持警惕。 特別是涉及Cookie時。

  6. 說到緩存,您肯定需要自己動手:在WP插入時,輸出已經開始-即使它在緩沖區中,並且所有插件都將緩存在shutdown鈎子上。

  7. 如果您需要使WP為任意頁面提供服務,請使WP_HOME指向站點的根文件夾,它應該可以工作…

如果我在阻止您嘗試方面做得很差,我將通過兩個鏈接作為進一步啟發的結尾:

暫無
暫無

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

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