Holen Sie plugin_dir_url () von einer Ebene tief in Plugin

Ich habe mehrere Plugins mit der Struktur geschrieben:

/plugins/myplugin/myplugin.php /plugins/myplugin/class/class-myclass.php

Um OO zu nutzen und meinen Code insgesamt zu strukturieren

Von innerhalb der classndatei gibt es Zeiten, die ich die URL des Basisplugins bekommen muss … Ich habe das folgende benutzt, aber ich bin sicher, dass es einen besseren Weg gibt:

$this->plugin_location = substr(plugin_dir_url(__FILE__),0, strrpos(plugin_dir_url(__FILE__), "/",-2)) . "/"; 

Eine andere Idee, mit der ich spielte, war eine zusätzliche Singleton-class, die alle Einstellungen für das Plugin speichert und eine Abstraktionsschicht über die classndateien hinzufügt.

Jede Hilfe wird sehr geschätzt.

Solutions Collecting From Web of "Holen Sie plugin_dir_url () von einer Ebene tief in Plugin"

In einem Unterverzeichnis innerhalb Ihres Plugin-Verzeichnisses können Sie den folgenden Code verwenden:

 $this->plugin_location = plugin_dir_url(dirname(__FILE__)); 

Sie sollten alle Ihre classn unabhängig von ihrem tatsächlichen Standort machen, damit Sie sie leicht verschieben und vielleicht in anderen Projekten wiederverwenden können.

Ich würde eine class erstellen, die den anderen classn sagt, welchen Pfad oder welche URL zu verwenden ist, lassen Sie es eine Schnittstelle implementieren, damit Sie die anderen classn vielleicht sogar in einem Thema oder komplett außerhalb von WordPress wiederverwenden können.

Beispiel für die Schnittstelle:

 interface DirectoryAddress { /** * @return string Dir URL with trailing slash */ public function url(); /** * @return string Dir path with trailing slash */ public function path(); } 

Die konkrete Implementierung in Ihrem Plugin könnte so aussehen:

 class PluginDirectoryAddress implements DirectoryAddress { private $path; private $url; public function __construct( $dirpath ) { $this->url = plugins_url( '/', $dirpath ); $this->path = plugin_dir_path( $dirpath ); } /** * @return string Dir URL with trailing slash */ public function url() { return $this->url; } /** * @return string Dir path without trailing slash */ public function path() { return $this->path; } } 

Jetzt erstellen Sie eine Instanz dieser class in Ihrer Haupt-Plugin-Datei:

 $address = new PluginDirectoryAddress( __DIR__ ); 

Und alle anderen classn haben nur eine Abhängigkeit von der Schnittstelle in ihrem Konstruktor, so:

 public function __construct( DirectoryAddress $directory ) {} 

Sie greifen jetzt nur auf die URL und den Pfad von der übergebenen Instanz zu.