在我的主题目录中,我有以下结构:
/包括/功能自定义。php包括/avatax/avatax。php包括/类/GMAP。班php
我正在从函数自定义打电话。php使用以下代码在WordPress管理中包含第二个文件
require_once(\'avatax/AvaTax.php\'); //Avalara Sales Tax API
if ( is_admin() ) {
require_once(\'classes/gmaps.class.php\');
}
第一个要求适用于主题和管理员。第二个显然只适用于管理员。但是,第一个require失败,并显示以下消息:
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
我觉得这不应该是个难缠的人。也许我忽略了一些显而易见的事情?我尝试过在文件路径之前使用常量“TEMPLATEPATH”,并使用明显的WordPress函数,如
require_once(get_template_directory().\'/path/to/file\');
我正在本地开发MAMP。特别奇怪的是调用文件(在错误消息中)“/classes/BatchSvc/WP\\u User\\u Search”。班php’。
有人能帮忙吗?
最合适的回答,由SO网友:Philip Downer 整理而成
因此,经过一个晚上的睡眠,以及上述用户确认我正确地包含了文件后,我成功地解决了这个问题。
在《阿凡达》中。php文件中,有一个\\uu autoload()函数:
<?php
function __autoload($class_name)
{
if ( $class_name != \'WP_User_Search\' ) { //WORDPRESS HACK
$path=dirname(__FILE__).\'/classes/\'.$class_name . \'.class.php\';
if(!file_exists($path))
{
$path=dirname(__FILE__).\'/classes/BatchSvc/\'.$class_name . \'.class.php\';
}
require_once $path;
}
}
?>
正在向函数传递WordPress-$class\\u name中的变量。我不完全确定变量来自哪里,但可能会转储$\\u GLOBALS或$wp\\u查询并找到答案。我基本上已经确保(破解)了该函数,以确保传递的变量与字符串“WP\\u User\\u Search”不匹配。
至于我的include文件,我使用了以下代码:
<?php
define(\'INCLUDE_PATH\', get_template_directory().\'/includes\');
require_once(INCLUDE_PATH.\'/avatax/AvaTax.php\'); //Avalara Sales Tax API
if ( is_admin() ) {
require_once(INCLUDE_PATH.\'/classes/gmaps.class.php\');
}
?>
谢谢你帮我解决这个问题,伙计们!
SO网友:D.A.H
Manifestphil, 如果您使用WordPress Autoloader,就不必担心加载类的文件。当然,您必须在这种情况下编写干净的类文件,这也使您的代码更易于管理。
简单步骤:
在主题根文件夹中创建文件夹/库要避免相同类名的问题,请使用namespaces 并创建appropriate folders structure明智地编写代码以支持自动加载类。将代码划分为类,以便仅在绝对必要时加载类。避免使用大类文件例如,要加载类MyNameSpace\\MyClass,您需要如下所示的文件夹结构:
/mytheme
/lib
/MyNameSpace
/MyClass.php
如果初始化新对象或调用某些方法等,则会自动加载类文件。此外,它还可以与任何WordPress挂钩方法配合使用,例如:
add_action ( \'admin_menu\', \'MyNameSpace\\MyClass::AddSomeToolsMenu\' );
在上面的case中,仅当实际需要并由WordPress调用时才加载类:)