How can I include WordPress functions in a custom .php file?
In detail: I have a directory under my theme (Constructor) named reports. These contain .php files that generate reports from data from the site with DOMPDF for downloading. For these I would like to use functions that the WordPress engine provides, for example get_the_author_meta( 'user_firstname', $user_id )
. If I use these i get (naturally) the following error:
Fatal error: Call to undefined function get_the_author_meta() in ROOT/public_html/wp-content/themes/constructor/reports/testreport.php on line 15
I was lead to believe that I need to include wp-blog-header.php . I use require_once("../../../../wp-blog-header.php");
. With this I get the following 404 error:
No webpage was found for the web address: ROOT/wp-content/themes/constructor/reports/testreport.php
(The require points to the correct path. If I fiddle with it, I get Warning: require_once(../../../wp-blog-header.php): failed to open stream... So the path must be correct.)
Is there something I overlook? Why can't I include this wp file? What is the correct method to include the wp functions?
Thanks for the help, Sziro
Add a PHP Function add_shortcode( 'test', 'test_func' ); You can then select Update File. Now, you can call this PHP function using the defined shortcode. In the above example, we set the shortcode as test.
You're on the right track. Try this instead:
require_once("../../../../wp-load.php");
To use wp functions in custom .php files, you must include wp-load.php
in your file.
You can do so by adding the following line:
require_once(PATH_TO.'/wp-load.php');
If WordPress is in the document root add instead:
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
Well if someone has newer PHP versions installed (ver >= 5.5.x) then they can also try the below code in the root script in WordPress website directory itself:
<?php
define("WP_ROOT", __DIR__);
define("DS", DIRECTORY_SEPARATOR);
require_once WP_ROOT . DS . "wp-load.php";
Or
<?php
define("WP_ROOT", __DIR__);
define("DS", DIRECTORY_SEPARATOR);
require_once WP_ROOT . DS . "wp-blog-header.php";
I guess this is a more direct and clean approach and doesn't involve manually adding slashes and changing diretories by ..
.
Hope this helps someone.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With