wake-up-neo.com

Holen Sie sich plugin_dir_url () von einer Ebene tief im Plugin

Ich habe mehrere Plugins mit der Struktur geschrieben:

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

Um die Vorteile von OO und der allgemeinen Strukturierung meines Codes zu nutzen

In der Klassendatei muss ich manchmal die URL des Basis-Plugins abrufen ... Ich habe Folgendes verwendet, aber ich bin mir 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-Klasse, die alle Einstellungen für das Plugin speichert und eine Abstraktionsschicht über die Klassendateien hinzufügt.

Jede Hilfe wird sehr geschätzt.

12
setterGetter

In einem Unterverzeichnis in Ihrem Plugin-Verzeichnis können Sie den folgenden Code verwenden:

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

Sie sollten alle Ihre Klassen unabhängig vom tatsächlichen Standort machen, damit Sie sie problemlos verschieben und möglicherweise in anderen Projekten wiederverwenden können.

Ich würde eine Klasse erstellen, die den anderen Klassen mitteilt, welchen Pfad oder welche URL sie verwenden sollen, und eine Schnittstelle implementieren lassen, damit Sie die anderen Klassen möglicherweise sogar in einem Thema oder vollständig 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 Klasse in Ihrer Haupt-Plugin-Datei:

$address = new PluginDirectoryAddress( __DIR__ );

Und alle anderen Klassen haben nur eine Abhängigkeit von der Schnittstelle in ihrem Konstruktor, wie folgt:

public function __construct( DirectoryAddress $directory ) {}

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

7
fuxia