wie man require_once() für eine PHP-Datei in WordPress zulässt

Lesezeit: 4 Minuten

Benutzer-Avatar
Samad

Ich habe eine Website, die von WordPress erstellt wurde, und ich habe einige PHP-Dateien erstellt, die ich ausführen möchte, und aus irgendeinem Grund muss ich require_once (/wp-includes/class-phpass.php) benötigen, aber ich habe einen Fehler beim Öffnen von erforderlichen Fehlern erhalten htaccess-Datei im Stammordner und sie existiert nicht im wp-includes-Ordner, die htaccess enthält Folgendes:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

also wie löst man dieses problem?! , Vielen Dank

Bearbeiten

Mein WordPress ist nicht im Root-Ordner installiert, es ist wie Root/Live

  • require ist eine dateisystemlokale Prozedur und besteht daher nicht die .htaccess Regeln.

    – Niels Keurentjes

    16. Oktober 2014 um 21:32 Uhr

  • Warum habe ich dann diesen Fehler?!

    – Samad

    16. Oktober 2014 um 21:34 Uhr

  • Wahrscheinlich ein Problem mit Ihren Dateipfaden.

    – Leo Bedrosian

    16. Oktober 2014 um 21:34 Uhr

  • Mein Root-Verzeichnis ist wie folgt /index.php . . . /myfile.php /wp-includes/class-phpass.php und die Funktion require_once( ‘/wp-includes/class-phpass.php’ ); ist was falsch?!

    – Samad

    16. Oktober 2014 um 21:41 Uhr

Benutzer-Avatar
Niels Keurentjes

Angenommen, dies ist Ihr wörtlicher Code:

require_once('/wp-includes/class-phpass.php');

Kein Wunder, dass die Datei nicht gefunden werden kann, da require arbeitet auf Dateisystemebene, also brauchen Sie wahrscheinlich so etwas wie /var/www/mysite/wp-includes/class-phpass.php stattdessen.

Sie sollten in der Lage sein, es so zum Laufen zu bringen:

require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-includes/class-phpass.php';

Dadurch wird der aktuelle Stammpfad der Website vor dem Unterpfad eingefügt. $_SERVER['DOCUMENT_ROOT'] ist standardmäßig der einzige Anschein, den PHP von einem ‘Root-Pfad’ hat, es sei denn, Sie lehren es besser.

  • Ja, ich vermeide WordPress wie die Pest, also kenne ich nicht alle seine benutzerdefinierten Konstanten. Ich habe ausdrücklich gesagt, dass es in der Lage sein sollte, es zum Laufen zu bringen, weil es wahrscheinlich in der Wurzel war. Sie sollten immer noch, auch wenn BASE_PATH ist verfügbar, bevorzugen Sie relative Pfade basierend auf __DIR__ stattdessen. Aber ich werde diese Antwort löschen, da Ihre für WP vollständiger ist.

    – Niels Keurentjes

    16. Oktober 2014 um 21:41 Uhr

  • Ich habe meinen Kommentar gerade bearbeitet, es scheint, dass BASE_PATH nicht mehr verfügbar ist und codex.wordpress.org/Function_Reference/get_home_path ist die neue bevorzugte Methode 🙁

    – Jonathan

    16. Oktober 2014 um 21:42 Uhr

  • Das ist einer der Gründe, warum ich relative Pfade basierend auf bevorzugen würde __DIR__ – WordPress und seine beschissenen inkonsistenten APIs.

    – Niels Keurentjes

    16. Oktober 2014 um 21:43 Uhr

  • Ja, ich muss ein paar Themen ändern, wenn ich morgen zur Arbeit komme, da ich gerade festgestellt habe, dass sie wahrscheinlich alle borken sind 😮

    – Jonathan

    16. Oktober 2014 um 21:43 Uhr

  • PHP kennt das Konzept der „Home-Pfade“ nicht. Eine PHP-Datei ist genau das – eine Datei. Es hat kein Konzept eines Heimpfades, es sei denn, es wird ihm beigebracht, genau deshalb hat WP diese Funktion dafür.

    – Niels Keurentjes

    16. Oktober 2014 um 21:58 Uhr

WordPress 5.x-kompatibel:

Dies kann beispielsweise dazu verwendet werden functions.php zu deinem Thema:

if (!defined("MY_THEME_DIR")) define("MY_THEME_DIR", trailingslashit( get_template_directory() ));

  require_once MY_THEME_DIR.'includes/bs4navwalker.php';

  • Bitte beachten Sie, dass bei Verwendung von untergeordneten Themen der Pfad des übergeordneten Themenordners zurückgegeben wird. get_stylesheet_directory() scheint fehlersicherer zu sein.

    – auf keinen Fall

    5. Juni 2020 um 17:27 Uhr


Benutzer-Avatar
Jonathan

Wie im Kommentar erwähnt, ist require eine dateisystemlokale Prozedur – sie verarbeitet die htaccess-Regeln nicht.

Sie versuchen zu

require_once(/wp-includes/class-phpass.php);

Dies sucht im Stammverzeichnis Ihres Computers nach /wp-includes/

Dies würde funktionieren, wenn Ihre WordPress im document_root installiert ist (burt ist nicht der empfohlene Weg):

require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-includes/class-phpass.php');

Aber das solltest du verwenden:

$install_path = get_home_path();
require_once($install_path. '/wp-includes/class-phpass.php');

wie von dieser Codex-Seite referenziert: http://codex.wordpress.org/Function_Reference/get_home_path

Wenn Sie Skripte erstellen, die den WordPress-Kern verwenden müssen, aber nicht im Rahmen von WordPress selbst ausgeführt werden, müssen Sie Folgendes tun:

define('WP_USE_THEMES', false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require( $_SERVER['DOCUMENT_ROOT'] . '/path/to/wp-load.php');

$install_path = get_home_path();
require_once($install_path. '/wp-includes/class-phpass.php');

  • Schwerwiegender Fehler: Aufruf der undefinierten Funktion get_home_path()

    – Samad

    16. Oktober 2014 um 21:53 Uhr

  • Ich habe meine Antwort bearbeitet – vielleicht möchten Sie Ihrer Frage weitere Informationen zum Einbinden des WordPress-Kerns in ein externes Skript hinzufügen …

    – Jonathan

    16. Oktober 2014 um 22:01 Uhr

1365150cookie-checkwie man require_once() für eine PHP-Datei in WordPress zulässt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy