Wie füge ich WordPress-Funktionen in eine benutzerdefinierte .php-Datei ein?

72

Wie kann ich WordPress-Funktionen in eine benutzerdefinierte .php-Datei aufnehmen?

Im Detail: Ich habe ein Verzeichnis unter meinem Thema (Konstruktor) mit dem Namen Berichte. Diese enthalten .php-Dateien, die Berichte aus Daten von der Site mit DOMPDF zum Herunterladen generieren. Für diese möchte ich beispielsweise Funktionen verwenden, die die WordPress-Engine bietet get_the_author_meta( 'user_firstname', $user_id ). Wenn ich diese benutze, bekomme ich (natürlich) folgenden Fehler:

Schwerwiegender Fehler: Aufruf der undefinierten Funktion get_the_author_meta () in ROOT / public_html / wp-content / themes / constructor / reports / testreport.php in Zeile 15

Ich wurde zu der Überzeugung gebracht, dass ich wp-blog-header.php einschließen muss. Ich benutze require_once("../../../../wp-blog-header.php");. Damit erhalte ich folgenden 404 Fehler:

Für die Webadresse wurde keine Webseite gefunden: ROOT / wp-content / themes / constructor / reports / testreport.php

(Die Anforderung zeigt auf den richtigen Pfad. Wenn ich damit herumfummle, erhalte ich die Warnung: require_once (../../../ wp-blog-header.php): Der Stream konnte nicht geöffnet werden ... Der Pfad muss also richtig sein.)

Gibt es etwas, das ich übersehen habe? Warum kann ich diese WP-Datei nicht einschließen? Was ist die richtige Methode, um die wp-Funktionen einzuschließen?

Danke für die Hilfe, Sziro

Sziro
quelle

Antworten:

127

Du bist auf dem richtigen Weg. Versuchen Sie stattdessen Folgendes:

require_once("../../../../wp-load.php");
seanbreeden
quelle
1
Danke, das ist die Lösung!
Sziro
4
Dies ist eine gute Lösung, aber das lädt alle wp-Sites mit allen installierten Plugins und Themes ... diese Verletzung des Yagni-Prinzips en.wikipedia.org/wiki/You_aren't_gonna_need_it
HMagdy
2
Dies mag zutreffen, wenn er eine Datei IN Wordpress geladen hat, aber wenn Sie die ursprüngliche Frage gelesen haben, hat er gefragt, wie man sie aus einer externen PHP-Datei lädt.
Seanbreeden
6
Reiniger:require_once(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/wp-load.php');
Jack
2
$_SERVERkann nicht über cli definiert werden, benutze__DIR__ . '/path/to/wp-load,php';
zanderwar
29

Um wp-Funktionen in benutzerdefinierten .php-Dateien zu verwenden, müssen Sie diese wp-load.phpin Ihre Datei aufnehmen. Sie können dies tun, indem Sie die folgende Zeile hinzufügen:

require_once(PATH_TO.'/wp-load.php');

Wenn sich WordPress im Dokumentenstamm befindet, fügen Sie stattdessen Folgendes hinzu:

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
Salam El-Banna
quelle
7
WordPress befindet sich nicht unbedingt im Dokumentenstamm.
Gerald Schneider
Außerdem müssen Sie document_root für Schrägstriche rtrimieren
Jack
4

Wenn jemand neuere PHP-Versionen installiert hat (ver> = 5.5.x), kann er auch den folgenden Code im Root-Skript im WordPress-Website-Verzeichnis selbst ausprobieren:

<?php
define("WP_ROOT", __DIR__);
define("DS", DIRECTORY_SEPARATOR);
require_once WP_ROOT . DS . "wp-load.php";

Oder

<?php
define("WP_ROOT", __DIR__);
define("DS", DIRECTORY_SEPARATOR);
require_once WP_ROOT . DS . "wp-blog-header.php";

Ich denke, dies ist ein direkterer und saubererer Ansatz und beinhaltet nicht das manuelle Hinzufügen von Schrägstrichen und das Ändern von Verzeichnissen durch ...

Hoffe das hilft jemandem.

VST
quelle
3
require_once(dirname(__FILE__) . '/options.php');

Dies ist eine bessere Möglichkeit, eine Datei in WordPress aufzunehmen.

Syed Naeem Tariq
quelle
3
Er fragte nicht, wie man eine Datei in Wordpress einfügt. Er wollte Wordpress aus einer externen PHP-Datei laden. Ihre Lösung würde nicht funktionieren.
Seanbreeden
Er ist sich dessen sicher, da bin ich mir sicher. Er fügt der Diskussion hinzu. Jetzt werde ich diese Methode + wp-load.php verwenden. ;)
Nick Res
1

Externe Dateien können problemlos auf die WordPress-Funktionen zugreifen. Sie müssen nur die Datei wp-load.phpin Ihre externe Datei aufnehmen. Die wp-load.phpDatei befindet sich im Stammverzeichnis Ihrer WordPress-Installation. Beispiel: Angenommen, Ihre Datei befindet test.phpsich im Stammverzeichnis der WordPress-Installation.

<?php
require_once('wp-load.php');
// Your custom code
?>

Quelle: Zugriff auf WordPress-Funktionen in einer externen Datei

Aman Dhanda
quelle
1

Ich benutze diese Methode, um eine WordPress-Umgebung außerhalb von WordPress zu laden.

  if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php')) {

      /** Loads the WordPress Environment and Template */
      require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');

  }
Maidul
quelle