我正在嘗試使用WPDB連接到Wordpress,因爲它是如此美麗的類,並且還有wp-config.php中指定的配置,因此我不需要再指定它。在獨立腳本中使用WPDB?
我要從主wordpress編寫一個小的分離腳本,以便在需要使用此WPDB實例的後臺運行。
我該如何歸檔?
任何幫助表示讚賞。
我正在嘗試使用WPDB連接到Wordpress,因爲它是如此美麗的類,並且還有wp-config.php中指定的配置,因此我不需要再指定它。在獨立腳本中使用WPDB?
我要從主wordpress編寫一個小的分離腳本,以便在需要使用此WPDB實例的後臺運行。
我該如何歸檔?
任何幫助表示讚賞。
最好的(最快和最安全的)方式來加載只加載的WordPress的核心功能是使用SHORTINIT
標誌是這樣的:
define('SHORTINIT', true);
require('/path/to/wp-load.php');
//Here you can use WordPress core features, for example the $WPDB object
更多有關這一點,看看是裝,是檢查/wp-settings.php
中的代碼。在那裏,你會發現下面的部分:
// Stop most of WordPress from being loaded if we just want the basics.
if (SHORTINIT)
return false;
這意味着,以後的事就不會被加載,這是相當多的事情,你可以看到。與僅加載wp-load.php
相比,佔用空間將小得多,並且仍然可以訪問WordPress內核中的所有內置函數,而不像直接包含例如/wp-includes/wp-db.php
。 WP內核中的許多功能在其他文件中也存在依賴關係,並且可能會弄得一團糟,無法確切知道需要包含哪些文件才能做到您想要的功能。 SHORTINIT
包含所需的依賴關係,因此您不必擔心這一點。
如果你確切知道你需要什麼,例如只有WPDB,最快的方法當然只包括你需要的文件,但SHORTINIT
提供了一個更安全和更標準化的方式來加載WP核心和依賴關係。隨着SHORTINIT
WordPress不加載插件,插件API的大部分部分,主題,主題功能和大多數管理和前端功能。這是典型的WordPress安裝中繁重的代碼。 在大多數情況下,我認爲SHORTINIT
與僅包含您需要的文件相比,在速度/性能方面值得進行小幅折衷,在大多數情況下,與滿載相比,性能提升很大。
<?php
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';
// $wpdb is available, do stuff
「wp-load.php」不夠? – 2011-03-16 21:30:20
是的,wp-load本身就足夠了,它加載了所有的剩餘部分 - 換句話說,這是加載所有的WordPress,包括所有的插件。 – 2013-03-20 22:47:10
的WordPress實際上允許你只創建一個名爲db.php
文件並將其保存在您的wp-content
的根目錄下使用自己的DBA(數據庫抽象層)。
我遇到了需要通過我寫的類來訪問數據庫的問題,這與WordPress沒有任何關係,但我不想用這個腳本創建一個全新的DBA。
由於默認WPDB
不允許你使用工廠模式,我很快就寫了幾行字來支持它,並把它添加到db.php
...
<?php
class DB extends wpdb
{
protected static $instance = null;
public static function getInstance()
{
if (!self::$instance) {
self::$instance = new DB(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
}
return self::$instance;
}
}
$wpdb = DB::getInstance();
現在需要使用wpdb
從當在其他地方(在我的情況下,非WordPress的類),你可以使用JUSE:
$wpdb = DB::getInstance();
從一個方法中,而不是可怕的global
。
獲取$ wpdb的美麗方式 – hidden 2012-07-16 20:57:32
哇,我在哪裏可以瞭解更多關於WordPress的DBA和db.php文件? – BenRacicot 2015-03-05 03:14:11
與此問題是代碼仍然調用WordPress函數像apply_filter。我試圖找到一種方法來包含任何其他無關的PHP文件(或整個事情)。 – 2016-04-06 02:56:29
通過使用以下代碼,您可以在主題文件夾內的新.php文件中使用$ wpdb。
$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$url = $_SERVER['REQUEST_URI'];
$my_url = explode('wp-content' , $url);
$path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0];
include_once $path . '/wp-config.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';
global $wpdb;
據我所見,這是在這裏提到的加載最低代碼僅使用wpdb,而不加載所有WordPress的唯一方法... – 2013-03-20 22:48:16
以下兩步就夠了。
您可以在此頁面中使用的任何全局變量。確保你提供了正確的包含wp-blog-header.php的路徑。不需要包含多個文件。
你應該只是require_once('../../../ wp-load.php');
然後你所有的wordpress類鉤子,一切都會加載。現在您可以開始使用全局$ wpdb與數據庫進行交互了,wpdb實例將啓動
您只需將wp-load.php文件包含到您的腳本中。
require('the/path/to/wp-load.php file');
這應該做的伎倆:
preg_match('/^(.+)wp-content\/.*/', dirname(__FILE__), $path);
include($path[1] . 'wp-load.php');
只是一個單一的線速度與輕量級的方式是
要求(目錄名(_FILE__)'/可溼性粉劑博客 - header.php文件。 「);
原因是因爲WordPress的初始化加載的index.php,當你檢查的index.php,你看:
要求(目錄名(__FILE__) '/可溼性粉劑博客 - header.php文件'。) ;
這加載和引導WordPress的。
所以使用WordPress WordPress的外面安裝,只需創建一個新的文件,然後寫:
要求;(目錄名(__FILE__) '/可溼性粉劑博客 - header.php文件'。)
然後進行測試,寫入:global $ wpdb; var_export($ wpdb)。
所以現在你可以訪問所有的wordpress API和數據庫對象$ wpdb。
這絕對是最好的答案! – 2015-05-22 03:29:07
到目前爲止,使用SHORTINIT作爲自定義腳本的最佳答案是速度更快。 – 2015-07-25 12:29:00
謝謝!這正是我需要的。 wp-db.php本身需要一些無關的WP函數,這些函數不包含在內,這就解決了這個問題。 – 2016-04-06 03:00:05