下面是我的文件夹结构。我需要访问WordPress主题控制器中的类。
控制器->WP\\U Db\\U连接。php
控制器->WP\\U产品。php
示例插件。php连接。php
class WP_Db_connection {
public $dbConfig = [];
public $errors = [];
// Constructor
function __construct() {
self::init_db()
}
function init_db () {
// Code to return DB connection
}
}
new WP_Db_connection();
->WP\\U产品。php
require_once ROOT_PATH.\'/WP_Db_connection.php\';
class WP_Product{
function __construct(){
echo \'Inside Products\';
}
}
new WP_Product();
->samplePlugin。php
spl_autoload_register ( "autoload", true, true );
function autoload($class){
try{
$classPath = ROOT_PATH.\'/controllers/\'.str_replace ( \'\\\\\', \'/\', $class ) . \'.php\';
if($classPath && file_exists($classPath)){
require_once $classPath;
}
} catch (Exception $e){
echo \'<br>Exception caught: \'.$e;
}
}
class WP_main {
// Code for class
}
new WP_main();
在下面的主题代码中,WP\\u main存在,但其他类不存在。
echo \'WP_main: \'.class_exists(\'WP_main\');
echo \',WP_Product: \'.class_exists(\'WP_Product\');
echo \',WP_Db_connection: \'.class_exists(\'WP_Db_connection\');
输出:
WP_main: 1,WP_Db_connection: ,WP_Db_connection:
最合适的回答,由SO网友:Mark Kaplun 整理而成
依赖其他插件和主题中的代码是有问题的。主要的问题是确保插件实际上处于活动状态,否则您的代码只会破坏站点。
您可以在使用类或函数之前检查它是否存在,但如果您的功能取决于它们的存在,如果它们不存在,您将怎么做?
wordpress与另一个插件建立依赖关系的正确方法是挂接它们提供的操作和过滤器,而不是直接尝试访问代码。实际上,即使该代码可用,也不能保证它在插件的下一个版本中仍然存在,而操作和过滤器应该是稳定的。
这取决于插件是否能够公开足够多的钩子和API,以使其对您有用,但如果不能,您不应该试图通过直接调用东西来破解它,除非您了解,您基本上要对您所做的每一个更改都对测试这两个插件负全责