Carica un ambiente WordPress minimo


12

Ho creato il mio servizio di upload per il mio sito Web che è separato da WP, ma utilizza WP per fornire funzioni di database di basso livello e verifica dell'utente. Per fare ciò, includo wp-load.php nel mio script principale (Uploadify) ma farlo sembra riempire la memoria del server con componenti non necessari. Grazie a ciò, sto vedendo un errore nel mio script che sembra indicare un plug-in WP installato.

Come posso caricare solo i componenti WP principali e ignorare i plugin? È possibile?


1
Dai un'occhiata a BackPress .
soulseekah,

Risposte:


9

Disabilitare completamente i plugin significa perdere molti vantaggi.

Ci sono distribuzioni di wordpress che vanno oltre e strappano post e collegamenti ecc., Ma rimarranno sempre indietro rispetto al core di WordPress e tenderanno a non sopravvivere a lungo.

Ecco alcune cose che potrebbero essere fatte

Init breve

Mettendo questo nel tuo wp-config.php:

define( 'SHORTINIT', TRUE );

O definirlo da qualche parte prima di caricare in wordpress, dovrebbe ridurre il processo di caricamento e riportarlo a funzioni core minime.

Installazioni leggere secondarie

Imposta una seconda installazione di wordpress, con solo i plugin e i temi che desideri (se presenti). Quindi configura wp-config.php per usare la stessa directory wp-content e i valori del database.

Backpress

WordPress, l'originale BBpress e glotpress, tra gli altri, sono costruiti attorno alla libreria BackPress. Potresti usare questo invece di WordPress per fare il tuo lavoro anche se numerose API e funzionalità potrebbero mancare o necessitare di reimplementazione / porting

Tabelle delle opzioni

Vorrei anche tenere presente che WordPress carica l'intera tabella delle opzioni in memoria per ridurre le query, se stai salvando valori di grandi dimensioni in esso avrà un impatto sulle prestazioni.

Uscire presto

Potresti anche provare ad agganciarti a funzioni precedenti nel processo di caricamento di WordPress ed uscire dal processo PHP prima che WordPress sia finito, ma non posso consigliare su quanto sarebbe sicuro.

Caricamento selettivo dei plugin

C'è anche questo articolo sul caricamento selettivo dei plugin , ma richiede hack per i file core di wordpress


+1 Hai mai provato "Installazioni leggere secondarie" ?
Kaiser

Ho fatto cose simili, anche se mai per questo scopo, la maggior parte dei casi d'uso sarebbe meglio servita dal multisito. Principalmente lo uso in modo da poter avere un'installazione di sviluppo in esecuzione a fianco in modo che condividano il contenuto
Tom J Nowell

8

Uso BackPress , ma ho piccoli sviluppi, in cui utilizzo un'installazione predefinita e una fonte più piccola tramite const.

vedere sul wp-settings.php

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

Impostare const SHORTINIT su true in wp-config.phpe vedere la corsa veloce. define( 'SHORTINIT', TRUE );

Questi sono i file che ottieni:

// 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'

6

Per fare is_user_logged_in()e current_user_can()lavorare, ho trovato una risposta simile qui (non posso commentare) La comparazione corrisponde alle risposte qui, come:

L'uso di define('SHORTINIT', true)+ require('wp-load.php')+ include manualmente:

Pageload: 1.05 sek - file inclusi: 43 file

Confronto: utilizzando SOLO require('wp-load.php') :

Pageload: 1,35 sek - file inclusi: 419 file

La differenza di tempo (0.3 sek) potrebbe differire dalle installazioni e dai motori PHP, ma durante la convalida di molte richieste su un unico pageload, le cose si sommano! / @ Anna Ericson

È stata una buona idea utilizzare una chiamata relativa alla directory installata WP. Da un plugin personalizzato di Wordpress "ROOT" come:

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

Quindi nel mio 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' );

Successivamente, la convalida dell'utente funziona per me. Grazie alle parole finali di @Anna Ericson dal codice originale:

Per altre attività, eseguite su una o due richieste, rintracciare altri file necessari potrebbe non valere 0,3 sek . Salta la SHORTINIT costante e ingombra manualmente.


1
Questo è il modo più pulito finora. Funziona bene su chiamate Ajax caricando immagini limitate sulla nostra installazione.
Jonas Lundman,

@cavameta Come importare Woocommerce da svegliare con SHORTINIT?
webmastx,

2

Ci hai provato define('SHORTINIT', true);? Non l'ho testato da solo, ma sembra caricare pochissimi aspetti del core WP pur mantenendo abbastanza funzionalità, soprattutto se tutto ciò che vuoi è gestire il database.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.