Schnell gesagt, ich versuche, ein "Öko-System" mit WordPress zu bauen, wo ich ein Kern-Plugin und dann zusätzliche Add-on-Plugins habe.WordPress PSR-4 Namespaced Plugin Zugriff auf ein anderes Namespaced Plugin
Detaillierter, jedes Add-On-Plug-In erfordert das Kern-Plug-in zu funktionieren. Ich habe dies mit WordPress Standard-Kodierung und Dateistruktur Praktiken erreicht. Ich bin Überarbeitung dieses Projekt jetzt von Namensräumen PSR-4, Komponist, Bower und etc.
Standard-Wordpress-Installation
|
|__www
|
|___wp-admin
|
|___wp-content
| |
| |___plugins
| | |
| | |___my-core-plugin
| | | |
| | | |___library
| | | | |
| | | | |___class-post-register.php
| | | |
| | | |___vendor
| | | | |
| | | | |___autoload.php
| | | |
| | | |___composer.json
| | | |
| | | |___core.php
| | |
| | |___my-first-addon-plugin
| | | |
| | | |___library
| | | |
| | | |___vendor
| | | | |
| | | | |___autoload.php
| | | |
| | | |___composer.json
| | | |
| | | |___core.php
| | |
| | |___my-second-addon-plugin
| | | |
| | | |___library
| | | |
| | | |___vendor
| | | | |
| | | | |___autoload.php
| | | |
| | | |___composer.json
| | | |
| | | |___core.php
| | |
| |___themes
| | |
| | |___my-custom-theme
| |
| wp-includes
Core-Plugin PSR4 über Komponist
"autoload": {
"psr-4": {
"CorePlugin\\Library\\": "library"
}
}
verwenden Beispielkernplugin Klasse
<?php
namespace CorePlugin\library;
class Post_Register {
private __construct() {
// ... code
}
private init() {
}
private register($data) {
// .. code to register a custom post for example.
}
}
Erste Add-on-Plugin PSR4 über Komponisten
"autoload": {
"psr-4": {
"FirstAddon\\Library\\": "library"
}
}
Klasse aus einer Add-on-Plugin
Unten ist, wo ich bin verwirrt. Ich versuche, eine Klasse aus dem Kern-Plugin in einem anderen Namespace zu verwenden, und ich erhalte die Fehlermeldung:
Fatal error: Class 'CorePlugin\Library\Post_Register' not found in...
Beide Plugins AutoLoad- ihren jeweiligen Komponisten automatisches Laden von Dateien erzeugen, so dachte ich, würde ich in der Lage sein zu use
die Namespaces. Ich kam hierher, um zu fragen, bevor ich mich mit diesem Teil des PHP-Handbuchs beschäftige (http://php.net/manual/en/language.namespaces.php), in dem ich vielleicht den Unter-Namensraum ausprobieren würde.
<?php
namespace FirstAddon;
use CorePlugin\Library\Post_Register;
class First_Addon {
private __construct() {
// ... code
}
private init() {
}
private another_function() {
}
}
Außerdem bin ich zögerlich die Unter Namespacing mit Klammern zu verwenden, da zum Beispiel in Laravel, use
foo \ bar; und use
bar \ foo; so.
<?php namespace App\Services;
use App\User;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
class Registrar implements RegistrarContract {