Verstehe ich Plugins nicht?

Also versuche ich es so zu machen, dass du eine class aus einem untergeordneten Thema, Thema oder Plugin unter Verwendung des folgenden laden kannst:

class AisisCore_Loader_AutoLoader{ protected static $_instance; protected static $_directories; public function get_instance(){ if(null == self::$_instance){ self::$_instance = new self(); } self::$_directories = array( get_template_directory(), get_stylesheet_directory(), plugin_dir_path(__FILE__), ); return self::$_instance; } public function reset_instance(){ self::$_instance = null; } public function register_auto_loader(){ spl_autoload_register(array($this, 'load_class')); } public function load_class($class){ $path = str_replace('_', '/', $class); foreach(self::$_directories as $directories){ if(file_exists($directories . '/' . $path . '.php')){ require_once($directories . '/' . $path . '.php'); } } } } 

Aber ich glaube nicht, dass ich verstehe, wie die function plugin_dir_path funktioniert. Das Problem ist, dass nach dem Instanziieren dieser class keine class in das Verzeichnis des Plugins geladen werden kann. Das ist /plugin/myplugin/ Wie auch immer, wenn ich ein Theme mit dem Framework habe, das ich entwickle, und das Theme aktiviert ist, und ich diese class in der Hauptphp-Datei des Plugins über:

 //require_once(plugin_dir_path(__FILE__) . 'AisisCore/Loader/AutoLoader.php'); require_once(get_template_directory() . '/AisisCore/Loader/AutoLoader.php'); // Setup the autoloader. $auto_loader = AisisCore_Loader_AutoLoader::get_instance(); $auto_loader->register_auto_loader(); $obj = new AisisCore_Http_Http(); 

Dann funktioniert alles, es sieht die AisisCore_Http_http class und so weiter, aber wenn ich das tue:

 require_once(plugin_dir_path(__FILE__) . 'AisisCore/Loader/AutoLoader.php'); //require_once(get_template_directory() . '/AisisCore/Loader/AutoLoader.php'); // Setup the autoloader. $auto_loader = AisisCore_Loader_AutoLoader::get_instance(); $auto_loader->register_auto_loader(); $obj = new AisisCore_Http_Http(); 

es flippt aus und kann die class nicht finden.

Ideen?

Solutions Collecting From Web of "Verstehe ich Plugins nicht?"

wenn ich etwas Ähnliches antraf, fand ich eine Lösung, die funktioniert, wenn Ihr Framework in einem Plugin residiert (so scheint es).

Wenn sich Ihre Haupt-Plugin-Datei (eine, die von WordPress als Plugin-Datei erkannt wird) in zB /plugin/Aisis/ , können Sie diesen Pfad in eine Konstante setzen, z.

 define('AISISPATH', dirname(__FILE__)); require ( trailingslashit (AISISPATH) . 'AisisCore/Loader/AutoLoader.php' ); if ( ! class_exists('AisisCore_Loader_AutoLoader') ) die('Something strange happened.'); AisisCore_Loader_AutoLoader::get_instance(); 

get_instance() Sie in get_instance() Methode ” get_instance() ” der class ” AisisCore_Loader_AutoLoader ein:

  self::$_directories = array( get_template_directory(), get_stylesheet_directory(), trailingslashit( AISISPATH ) ); 

AisisCore_Loader_AutoLoader::$_directories[2] so AisisCore_Loader_AutoLoader::$_directories[2] , ist AisisCore_Loader_AutoLoader::$_directories[2] {wp_path_here}/plugin/Aisis , wenn du $obj = new AisisCore_Http_Http(); Ihre Autoloader-Methode sucht in {wp_path_here}/plugin/Aisis/AisisCore/Http/Http.php .

Alles funktioniert natürlich, wenn das Plugin vom WP-Dashboard aus aktiviert wird.

Wenn Sie diesen process befolgen, ist es eine gute Idee, die Methode get_instance() mit: if ( ! defined('AISISPATH ') ) die('Framework not initilized.');

Ihre Logik funktioniert wahrscheinlich nicht, da plugin_dir_path($file) nur ein Wrapper für trailingslashit( dirname( $file ) ) (siehe Codex ). Wenn Sie also diese function verwenden, übergeben Sie __FILE__ als Parameter und es wird der Ordner zurückgegeben, in dem der Datei, die die function aufruft (in deinem Fall ‘AisisCore / Loader /’) und nicht dein Framework root.

Hoffe das hilft dir.