Reputation: 2579
I am currently working on a plugin for Wordpress involving lots of .php files. I see that for my AddShift.php file, we are successfully importing the blog header using the following line of code:
include("../../../wp-blog-header.php");
However, when I try to do the same thing in my ajax_cal_split.php file, I get the following error:
Warning: include(./wp-blog-header.php) [function.include]: failed to open stream: No such file or directory in /opt/lampp/htdocs/sandboxj/blog/wp-content/plugins/Shifty/ajax_cal_split.php on line 11
Warning: include() [function.include]: Failed opening './wp-blog-header.php' for inclusion (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/sandboxj/blog/wp-content/plugins/Shifty/ajax_cal_split.php on line 11
Line 11 of course says
include("../../../wp-blog-header.php");
Is there any reason for this call to work on one .php file and not another, when they reside in the same directory?
Upvotes: 3
Views: 10205
Reputation: 315
This is your solution to get the real path in plugin file
<?php
$scriptPath = dirname(__FILE__);
$path = realpath($scriptPath . '/./');
$filepath = explode("wp-content",$path);
// print_r($filepath);
define('WP_USE_THEMES', false);
require(''.$filepath[0].'/wp-blog-header.php');
Upvotes: 7
Reputation: 369
it works, do as suggested and use an absolute url, i used
include("wp-content/themes/YOUR_THEME/DESIRED_FILE.php");
Upvotes: 0
Reputation: 1905
You should try using the WP_PLUGIN_URL constant provided by wordpress. For example, you can define you actual plugin url like this:
define('MyPLUGIN_URL', WP_PLUGIN_URL.'/plugin_folder/');
and then use it in your calls like:
include(MyPLUGIN_URL."wp-blog-header.php");
Thats how i solve the problem, sorry for late answer but it might help the next ones checking in.
Upvotes: 0
Reputation:
Yes - I believe wordpress operates a security mechanism on content in the wp-content directory, I had the same problem with themes. The workaround I used was to include with absolute path names.
Upvotes: 1