Laden Sie die minimale WordPress-Umgebung

11

Ich habe meinen eigenen Upload-Service für meine Website erstellt, der von WP getrennt ist, aber WP verwendet, um DB-Funktionen auf niedriger Ebene und Benutzerüberprüfung bereitzustellen. Dazu füge ich wp-load.php in mein Hauptskript (Uploadify) ein, aber dies scheint den Speicher des Servers mit unnötigen Komponenten zu füllen. Aus diesem Grund wird in meinem Skript ein Fehler angezeigt, der auf ein installiertes WP-Plugin hinweist.

Wie kann ich nur die WP-Kernkomponenten laden und Plugins ignorieren? Ist das überhaupt möglich?

MechEngineer
quelle
1
Schauen Sie sich BackPress an .
Soulseekah

Antworten:

8

Wenn Sie Plugins vollständig deaktivieren, verlieren Sie viele Vorteile.

Es gibt Distributionen von WordPress, die weiter gehen und Beiträge und Links usw. herausreißen, aber sie bleiben immer hinter dem WordPress-Kern zurück und überleben nicht so lange.

Hier sind einige Dinge, die getan werden könnten

Kurze Init

Fügen Sie dies in Ihre wp-config.php ein:

define( 'SHORTINIT', TRUE );

Wenn Sie es irgendwo definieren, bevor Sie es in WordPress laden, sollten Sie den Ladevorgang reduzieren und es auf minimale Kernfunktionen zurückführen.

Sekundäre Leichtbauinstallationen

Richten Sie eine zweite WordPress-Installation mit nur den gewünschten Plugins und Designs ein (falls vorhanden). Konfigurieren Sie dann die Datei wp-config.php so, dass sie dieselben wp-content-Verzeichnis- und Datenbankwerte verwendet.

Backpress

WordPress, das Original von BBpress und Glotpress, basieren unter anderem auf der BackPress-Bibliothek. Sie können dies anstelle von WordPress verwenden, um Ihre Arbeit zu erledigen, obwohl möglicherweise zahlreiche APIs und Funktionen fehlen oder erneut implementiert / portiert werden müssen

Optionstabellen

Ich würde auch bedenken, dass WordPress die gesamte Optionstabelle in den Speicher lädt, um Abfragen zu reduzieren. Wenn Sie dort große Werte speichern, wirkt sich dies auf die Leistung aus.

Früh abreisen

Sie können auch versuchen, frühere Funktionen im WordPress-Ladevorgang zu verwenden und den PHP-Prozess zu beenden, bevor WordPress fertig ist, aber ich kann nicht raten, wie sicher das wäre.

Plugins selektiv laden

Es gibt auch diesen Artikel zum selektiven Laden von Plugins , der jedoch Hacks für die WordPress-Kerndateien erfordert

Tom J Nowell
quelle
+1 Haben Sie schon einmal "Secondary Lightweight Installs" ausprobiert ?
Kaiser
Ich habe ähnliche Dinge getan, obwohl nie für diesen Zweck, die meisten Anwendungsfälle besser von Multisite bedient würden. Hauptsächlich benutze ich es, damit eine Entwicklungsinstallation nebeneinander ausgeführt werden kann, damit sie Inhalte teilen
Tom J Nowell
8

Verwenden Sie BackPress , aber ich habe kleine Entwicklungen, bei denen ich eine Standardinstallation und eine kleinere Quelle über const verwende.

siehe auf der wp-settings.php

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;

Setzen Sie die Konstante SHORTINIT in der auf true wp-config.phpund sehen Sie den schnellen Lauf. define( 'SHORTINIT', TRUE );

Dies sind die Dateien, die Sie erhalten:

// All are located in ABSPATH.WPINC
'/load.php'
'/default-constants.php'
'/version.php'
'/compat.php'
'/functions.php'
'/class-wp.php'
'/class-wp-error.php'
'/plugin.php'
'/default-filters.php'
'/pomo/mo.php'

// Only Multisite
'/ms-blogs.php'
'/ms-settings.php'
bueltge
quelle
6

Für das Machen is_user_logged_in()und current_user_can()Arbeiten habe ich hier eine ähnliche Antwort gefunden (Kommentar kann nicht kommentiert werden). Der Vergleich stimmt mit den Antworten hier überein, als:

Die manuelle Verwendung von define('SHORTINIT', true)+ require('wp-load.php')+ umfasst:

Pageload: 1.05 sek - enthaltene Dateien: 43 Dateien

Vergleichen: NUR mit require('wp-load.php') :

Pageload: 1.35 sek - enthaltene Dateien: 419 Dateien

Der Zeitunterschied (0,3 Sek.) Kann sich von Installationen und PHP-Engines unterscheiden, aber während die Validierung vieler Anfragen auf einer Seite - Dinge summieren sich! / @ Anna Ericson

Es war eine gute Idee, einen relativen Aufruf des installierten WP-Verzeichnisses zu verwenden. Von einem Wordpress-Plugin "ROOT" wie:

$wordpress = '../../../wp-load.php';

Dann in meinem Plugin index.php:

define('SHORTINIT', true);
include_once $wordpress;

require_once ( ABSPATH . WPINC . '/class-wp-user.php' );
require_once ( ABSPATH . WPINC . '/class-wp-roles.php' );
require_once ( ABSPATH . WPINC . '/class-wp-role.php' );
require_once ( ABSPATH . WPINC . '/class-wp-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/formatting.php' );
require_once ( ABSPATH . WPINC . '/capabilities.php' );
//require_once ( ABSPATH . WPINC . '/query.php' ); // - might be useful
require_once ( ABSPATH . WPINC . '/user.php' );
require_once ( ABSPATH . WPINC . '/meta.php' );

wp_cookie_constants();

require_once ( ABSPATH . WPINC . '/vars.php' );
require_once ( ABSPATH . WPINC . '/kses.php' );
require_once ( ABSPATH . WPINC . '/rest-api.php' );
require_once ( ABSPATH . WPINC . '/pluggable.php' );

Danach funktioniert die Benutzerüberprüfung für mich. Dank an @Anna Ericson letzte Worte aus dem Originalcode:

Bei anderen Aufgaben, bei denen ein oder zwei Anforderungen ausgeführt werden, ist das Aufspüren anderer benötigter Dateien möglicherweise nicht 0,3 Sek . Wert . Überspringen Sie die SHORTINIT Konstante und manuelle Unordnung.

Cavameta
quelle
1
Dies ist der bisher sauberste Weg. Funktioniert einwandfrei bei Ajax-Aufrufen, bei denen eingeschränkte Images in unsere Installation geladen werden.
Jonas Lundman
@cavameta Wie importiere ich Woocommerce mit SHORTINIT in den Wok?
Webmastx
2

Hast du es versucht define('SHORTINIT', true);? Ich habe es nicht selbst getestet, aber es scheint nur sehr wenige Aspekte des WP-Kerns zu laden, während genügend Funktionen erhalten bleiben, insbesondere wenn Sie sich nur mit der Datenbank befassen möchten.

Tomas Buteler
quelle