如何在自定义.php文件中包含WordPress函数?


72

如何在自定义.php文件中包含WordPress函数?

详细信息:我在主题(构造函数)下有一个名为reports的目录。这些文件包含.php文件,这些文件使用DOMPDF从站点数据生成报告以供下载。对于这些,我想使用WordPress引擎提供的功能,例如get_the_author_meta( 'user_firstname', $user_id )。如果我使用这些,我(自然)会收到以下错误:

致命错误:在第15行的ROOT / public_html / wp-content / themes / constructor / reports / testreport.php中调用未定义的函数get_the_author_meta()

导致我相信我需要包括wp-blog-header.php。我用require_once("../../../../wp-blog-header.php");。有了这个我得到以下404错误:

找不到网址的网页:ROOT / wp-content / themes / constructor / reports / testreport.php

(require指向正确的路径。如果我弄弄它,会得到警告:require_once(../../../ wp-blog-header.php):无法打开流...因此路径必须是正确的。)

有什么我忽略的吗?为什么我不能包含这个wp文件?包含wp函数的正确方法是什么?

感谢您的帮助,Sziro


Answers:


127

您走在正确的轨道上。尝试以下方法:

require_once("../../../../wp-load.php");

1
谢谢,这就是解决方案!
2013年

4
这是很好的解决方案,但是它将加载所有已安装的插件和主题的所有wp网站...违反yagni原则en.wikipedia.org/wiki/You_aren't_gonna_need_it
HMagdy 2014年

2
如果他正在Wordpress内部加载文件,这可能是正确的,但是如果您阅读了原始问题,他正在询问如何从外部php文件加载文件。
seanbreeden 2014年

6
清洁工:require_once(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/wp-load.php');
杰克

2
$_SERVER可能无法通过cli定义,请使用__DIR__ . '/path/to/wp-load,php';
zanderwar '18

29

要在自定义.php文件中使用wp函数,必须wp-load.php在文件中包含wp函数。您可以通过添加以下行来做到这一点:

require_once(PATH_TO.'/wp-load.php');

如果WordPress在文档根目录中,请添加:

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');

7
WordPress不一定在文档根目录中。
杰拉尔德·施耐德

另外,您还需要使用rtrim document_root进行正斜杠
Jack Jack

4

好吧,如果有人安装了较新的PHP版本(版本> = 5.5.x),那么他们还可以在WordPress网站目录本身的根脚本中尝试以下代码:

<?php
define("WP_ROOT", __DIR__);
define("DS", DIRECTORY_SEPARATOR);
require_once WP_ROOT . DS . "wp-load.php";

要么

<?php
define("WP_ROOT", __DIR__);
define("DS", DIRECTORY_SEPARATOR);
require_once WP_ROOT . DS . "wp-blog-header.php";

我猜这是一种更直接,更干净的方法,并且不涉及通过手动添加斜杠和更改目录..

希望这对某人有帮助。



1

外部文件可以轻松访问WordPress功能。您只需要wp-load.php在外部文件中包含该文件即可。该wp-load.php文件位于WordPress安装的根目录中。示例:假设您的文件test.php位于WordPress安装的根目录中。

<?php
require_once('wp-load.php');
// Your custom code
?>

来源:如何在外部文件中访问WordPress函数


1

我使用这种方法在WordPress之外加载WordPress环境。

  if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php')) {

      /** Loads the WordPress Environment and Template */
      require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');

  }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.