In my theme directory I have the following structure:
/includes/functions-custom.php
/includes/avatax/AvaTax.php
/includes/classes/gmaps.class.php
I’m making a call from the functions-custom.php to include the second file within the WordPress admin using this code
require_once('avatax/AvaTax.php'); //Avalara Sales Tax API
if ( is_admin() ) {
require_once('classes/gmaps.class.php');
}
The first require applies to both the theme and to the admin. The second, obviously, only applies to the admin. However, the first require fails with the following message:
Warning: require_once(/Users/philipdowner/Sites/dms/wp-content/themes/dms/includes/avatax/classes/BatchSvc/WP_User_Search.class.php) [function.require-once]: failed to open stream: No such file or directory in /Users/philipdowner/Sites/dms/wp-content/themes/dms/includes/avatax/AvaTax.php on line 23
Fatal error: require_once() [function.require]: Failed opening required '/Users/philipdowner/Sites/dms/wp-content/themes/dms/includes/avatax/classes/BatchSvc/WP_User_Search.class.php' (include_path='.:/Applications/MAMP/bin/php5/lib/php') in /Users/philipdowner/Sites/dms/wp-content/themes/dms/includes/avatax/AvaTax.php on line 23
I don’t feel like this should be such a stumper. Perhaps I’m overlooking something obvious? I’ve tried preceding the file path with the constant ‘TEMPLATEPATH’ and using the obvious WordPress functions like
require_once(get_template_directory().'/path/to/file');
I’m developing locally on MAMP. Particularly odd is the call to the file (in the error message) ‘/classes/BatchSvc/WP_User_Search.class.php’.
Can anyone help?
Avoid native php functions
You should NEVER use the constants
STYLESHEET_DIRECTORY
TEMPLATE_DIRECTORY
WP_PLUGIN_DIR
Remember: Those are not API! and can therefore change!
but INSTEAD USE the following API functions:
get_template_directory()
/get_template_directory_uri()
get_stylesheet_directory()
/get_stylesheet_directory_uri()
You can use both in Plugins and Themes:
plugin_dir_path(__FILE__).'/your/path/to/file.ext
*) for Themes alsoplugin_dir_url( __FILE__ ).'/your/path/to/file.ext
but
plugin_dir_url()
is reserved only for Plugins.Keep in mind…
That there’re
register_theme_directory( $dir );
So please stick with the native API functions like
wp_upload_dir();
,content_url();
, etc.In general: Take a look at
/wp-includes/link-template.php
for a whole bunch of nice path and URl related API functions.It looks like the require is being called from within
AvaTax.php
, so if you change the call to../classes/gmaps.class.php
(inAvaTax.php
, not infunctions-custom.php
) it should fix the error.So after a night of sleep, and confirmation from the above users that I was including files properly, I’ve managed to resolve the issue.
In the AvaTax.php file, there was an __autoload() function:
The function is being passed a variable from WordPress – $class_name. I’m not entirely sure where the variable comes from, but could probably dump the $_GLOBALS or $wp_query and find out. I’ve basically ensured (hacked) the function to ensure that the variable passed doesn’t match the string ‘WP_User_Search’.
As for my include files I’ve used the following code:
Thanks for helping me work thru this one guys!
Manifestphil, if you use WordPress Autoloader, you don’t have to worry about loading files of classes. Of course you have to write clean class files on this case, which also makes your code more manageable.
Easy steps:
For example to load class MyNameSpaceMyClass you need folders structure shown below:
If you initialize new object or call some method etc, your class file is automatically loaded. Also it works really fine with any WordPress hooking method, for example:
On case above your class is loaded only when actually needed and called by WordPress 🙂