wordpress-在独立脚本中使用WPDB?
我正在尝试使用WPDB连接到WordPress,因为它是一个非常漂亮的类,并且在wp-config.php中指定了一些配置,因此我无需再次指定它。
我将编写一个与主要WordPress分开的小脚本,以在后台运行,这需要使用此WPDB实例。
我该如何存档?
任何帮助表示赞赏。
DucDigital asked 2020-07-18T18:02:47Z
9个解决方案
63 votes
最好的(最快和最安全的)加载方式仅加载WordPress的核心功能是使用SHORTINIT标志,如下所示:
define( 'SHORTINIT', true );
require( '/path/to/wp-load.php' );
//Here you can use WordPress core features, for example the $WPDB object
有关此问题的更多信息并查看加载了什么,请检查SHORTINIT中的代码。您将在其中找到以下部分:
// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
return false;
这意味着此后的任何内容都不会被加载,并且您可以看到很多东西。 占用空间将比仅加载SHORTINIT小得多,并且仍然允许您访问WordPress核心中的所有内置函数,与直接包括SHORTINIT不同。 WP核心中的许多功能在其他文件中也具有依赖关系,弄清楚要包含哪些文件才能执行所需的操作可能很麻烦。 SHORTINIT包含所需的依赖关系,因此您不必为此担心。
如果您确切地知道需要什么,例如仅WPDB,最快的方法当然就是只包含所需的文件,但是SHORTINIT提供了一种更安全,更标准化的方式来加载WP核心和依赖项。 使用SHORTINIT,WordPress不会加载插件,插件API的大部分,主题,主题功能以及大多数管理和前端功能。 这是典型的WordPress安装中繁重的代码所在的地方。在大多数情况下,与仅包含所需文件相比,我认为SHORTINIT在速度/性能上需要进行小的折衷,并且与满载相比,在大多数情况下,性能可以得到极大提高。
Pelmered answered 2020-07-18T18:03:13Z
48 votes
确实SHORTINIT似乎是最好的解决方案:请参阅@Pelmered答案...
供参考:尽管在发行说明中未提及,但WordPress 3.0(2010年6月17日)中引入了SHORTINIT,通过查看代码本身可以清楚地了解其添加。
$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
farinspace answered 2020-07-18T18:03:37Z
19 votes
WordPress实际上允许您通过创建一个名为global的文件并将其保存在db.php目录的根中来使用自己的DBA(数据库抽象层)。
我遇到了需要通过我编写的类访问数据库的问题,这与WordPress无关,但是我不想创建一个与此脚本一起使用的全新DBA。
由于默认的global不允许您使用工厂模式,因此我迅速编写了几行以支持它,并将其添加到db.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();
现在,当需要从其他地方(在我的情况下为非WordPress类)使用global时,可以使用:
$wpdb = DB::getInstance();
而不是可怕的global。
Matt Humphrey answered 2020-07-18T18:04:15Z
14 votes
您可以使用以下代码在主题文件夹内的新.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;
Ankur21 answered 2020-07-18T18:04:35Z
4 votes
您只需要在脚本中包含wp-load.php文件即可。
require('the/path/to/wp-load.php file');
Systematix Infotech answered 2020-07-18T18:04:56Z
4 votes
这也应该达到目的:
preg_match('/^(.+)wp-content\/.*/', dirname(__FILE__), $path);
include($path[1] . 'wp-load.php');
Olli Bolli answered 2020-07-18T18:05:16Z
4 votes
您应该只需要global $wpdb;
然后,所有的WordPress类,钩子和所有内容都将被加载。 现在,您可以开始使用global $wpdb;与数据库进行交互,并且将启动wpdb实例。
Arsalan Azhar answered 2020-07-18T18:05:40Z
2 votes
只需执行以下两个步骤即可。
包括wp-blog-header.php文件
在使用$ wpdb之前,将其放置为全局$ wpdb;。
之后,您可以在此页面中使用的所有全局变量。 确保您提供了wp-blog-header.php的正确包含路径。 无需包含多个文件。
Sudharshan Ramasubramaniam answered 2020-07-18T18:06:13Z
1 votes
只需一行就可以实现快速,轻便的方式
require(dirname(_FILE __)。'/ wp-blog-header.php');
原因是因为WordPress初始化了初始化index.php的加载,并且当您检查index.php时,您看到:
require(dirname(__ FILE __)。'/ wp-blog-header.php');
这将加载并引导WordPress。
因此要在WordPress安装之外使用WordPress,只需创建一个新文件,然后编写:
require(dirname(__ FILE __)。'/ wp-blog-header.php');
然后进行测试,写:global $ wpdb; var_export($ wpdb)。
因此,现在您可以访问所有WordPress API和数据库对象$ wpdb。
Devqxz answered 2020-07-18T18:07:09Z