我正在尝试使用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