wordpress 独立 php,wordpress-在独立脚本中使用WPDB?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值