Was soll ich anstelle von WP_CONTENT_DIR und WP_PLUGIN_DIR verwenden?

15

In der WordPress-Dokumentation zum Ermitteln von Plugin- und Inhaltsverzeichnissen heißt es:

WordPress verwendet die folgenden Konstanten, um den Pfad zu den Inhalts- und Plugin-Verzeichnissen zu bestimmen. Diese sollten nicht direkt von Plugins oder Themes verwendet werden. Der Vollständigkeit halber werden sie hier aufgeführt.

Es folgt eine Liste WP_CONTENT_DIRund eine Liste der WP_PLUGIN_DIRKonstanten, die Theme- und Plugin-Entwickler nicht verwenden sollten, vermutlich aus folgendem Grund:

Mit WordPress können Benutzer ihr WP-Inhaltsverzeichnis an einer beliebigen Stelle platzieren. Sie dürfen also niemals davon ausgehen, dass sich Plugins in WP-Inhalten / Plugins befinden oder dass sich Uploads in WP-Inhalten / Uploads befinden oder dass sich Themen in WP-Inhalten / Uploads befinden. Inhalt / Themen.

Mark Jaquith bemerkt hier auch, dass diese Konstanten nicht verwendet werden sollten:

Verwenden Sie nicht WP_PLUGIN_URL oder WP_PLUGIN_DIR - Plugins befinden sich möglicherweise nicht im Plugins-Verzeichnis.

Was ist die akzeptierte Methode, um den vollständigen Pfad zu den Ordnern für Plugins, WP-Inhalte und Designs zu referenzieren, ohne diese Konstanten zu verwenden?

Als einfaches Beispiel, um den vollständigen Pfad aller installierten Plugins auszugeben, kann ich dies tun:

<?php
$plugins = get_plugins();

foreach ($plugins as $file => $details) {
    echo WP_PLUGIN_DIR . '/' . $file . '<br>';
}

Was ergibt eine Liste wie folgt:

/var/www/wp-content/plugins/akismet/akismet.php
/var/www/wp-content/plugins/debug-bar/debug-bar.php
/var/www/wp-content/plugins/hello.php

(Ich möchte dies möglicherweise tun, wenn ich ein Plugin geschrieben habe, damit der Benutzer Plugins zum Beispiel als Teil einer Site-Sicherung selektiv archivieren kann.)

Wenn die Verwendung WP_PLUGIN_DIRfalsch ist, welche Alternative wird empfohlen? Es gibt keine Entsprechung wp_upload_dir()für den Ordner plugins, themes und wp-content, den ich finden kann, was das Verweisen auf die möglicherweise umherirrenden Themes und Plugins-Stammverzeichnisse problematisch macht.

Nick
quelle
Lesen Sie den Codex-Artikel Ermitteln von Plugin- und Inhaltsverzeichnissen .
Charles Clarkson
2
@CharlesClarkson Ich verweise auf diese Seite im ersten Satz meiner Frage. Es besagt, obige Konstanten nicht zu verwenden, schlägt aber keine Alternative zu Dingen wie vor WP_PLUGIN_DIR, daher meine Frage hier.
Nick

Antworten:

17

Referenzdatei im aktuellen Pfad oder tiefer verschachtelt

Den aktuellen Pfad referenzieren

plugin_dir_path( __FILE__ )."further/nesting/here.css";

das funktioniert in Plugins und Themes .

Referenz URl / URi in einem Plugin

Verwenden Sie, um auf ein Plugin oder eine Designdatei zu verweisen

plugins_url( "path/to/file", __FILE__ );

das funktioniert nur in plugins

Referenz URl / URi im wp-adminOrdner

Zeigen Sie immer auf admin_url( 'some/path' );. Das gibt es get_admin_url()auch.

Referenz URl / Uri im wp-includesOrdner

Zeigen Sie sie auf includes_url( 'some/path' );

Ein URl / URi in Bezug auf die Site-Startseite

Es gibt home_url( 'etc' );oder get_home_url()dafür. Ähnlich ist get_site_url()und site_url(). Dann ist da auch noch network_home_url(). Und du hastnetwork_admin_url()

wp-content oder das umbenannte Verzeichnis

Sie können den wp-contentOrdnernamen neu definieren . Deshalb benutzt du content_url()dort.

Wie bekomme ich die URL des Plugins-Ordners?

Was ist die vorgeschlagene Alternative, wenn die Verwendung von WP_PLUGIN_DIR falsch ist?

Einfach plugins_url()ohne Parameter verwenden.

Wenn Sie es für ein Plugin verwenden, funktioniert es auch für MU-Plugins.

BEARBEITEN 1 Wenn Sie sich für den Pfad zum aktuellen Plugin interessieren, verwenden Sie plugin_basename();.

BEARBEITEN 2 Wenn Sie an allen seitlich aktiven Plugins interessiert sind, verwenden Sie wp_get_active_network_plugins();.

Wenn Sie nicht auf Multisite sind, gehen Sie mit wp_get_active_and_valid_plugins();. Dies wird Multisite / Netzwerk berücksichtigen. Denken Sie daran, dass dies sie berücksichtigt, wenn Sie nicht auf Multisite sind, aber ein sunrise.phpDrop-In haben.

Sie können sie auch über abrufen get_option( 'active_plugins' );, was nicht empfohlen wird, da Filter und Plugin-Validierung nicht berücksichtigt werden, was häufig vorkommt.


Weitere Lektüre

Diese Liste geht weiter und weiter. Weitere Informationen finden Sie in den Suchergebnissen auf QueryPosts.com .

Dieser Artikel geht in absoluter Tiefe auf alle Pfade ein.

Kaiser
quelle
3
Vielen Dank dafür, aber Ihre Antwort scheint sich eher mit URLs als mit absoluten Serverpfaden zu befassen, woran ich interessiert war. Gibt beispielsweise plugins_url()die URL zum Ordner plugins zurück, nicht den vollständigen Pfad zum Verzeichnis auf dem Server. Gibt es ähnliche Funktionen für den Umgang mit Verzeichnissen, die mir nicht bekannt sind? Oder ist der Rat, die WP_PLUGIN_DIRKonstante nicht zu verwenden, einfach falsch?
Nick
(Ich bin speziell daran interessiert, den vollständigen Pfad zu installierten Plugins zu finden, der nicht meinen eigenen Code enthält, falls dies zur Erklärung hilfreich ist.)
Nick,
@Nick Siehe Update.
Kaiser
Der Artikel, der "alle Plugins auf den Prüfstand stellt", ist nicht mehr verfügbar. Und ich kann immer noch nicht verstehen, wie man den absoluten Pfad zum Plugins-Verzeichnis ohne Verwendung von bekommt WP_PLUGIN_DIR.
XedinUnknown
4
  1. Dies gibt den Serverpfad des aktuellen Plugin-Verzeichnisses zurück:

    plugin_dir_path(__FILE__)
    
    // example: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/

    Siehe: https://codex.wordpress.org/Function_Reference/plugin_dir_path

    Nicht zu verwechseln mit:

    plugins_dir_path(__FILE__)

    (Beachten Sie den Plural „Plug - s “ auf das.)

  2. Da der Name des Plugin-Verzeichnisses nicht zurückgegeben werden soll, müssen wir ihn entfernen. Hier ist eine Funktion, die das Plugin-Verzeichnis und den Dateinamen zurückgibt:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. Aber wir wollen natürlich auch nicht den Dateinamen des Plugins, also müssen wir diesen zuerst entfernen plugin_basename(__FILE__). So geben Sie den Dateinamen des Plugins zurück:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. Um diese zu verwenden, um einen Pfad zum Plugin- Verzeichnis zu erstellen , können wir die folgende str_replace()Funktion verwenden:

    $myBnm = basename(__FILE__); // value: exampleplugin.php
    $myDir = plugin_basename(__FILE__); // value: exampleplugin/exampleplugin.php
    $myStr = str_replace($myBnm,"",$myDir); // value: exampleplugin/
    $myPth = plugin_dir_path(__FILE__); // value: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
  5. Bei Bedarf kann diese letzte Zeile natürlich einer Variablen zur wiederholten Verwendung zugewiesen werden.

    Anstatt von:

    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    Verwenden Sie etwas wie:

    $thePlgDir = str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    Und später, wenn nötig:

    return $thePlgDir;
Joe Rhoney
quelle