web-dev-qa-db-fra.com

Charger un environnement WordPress minimum

J'ai créé mon propre service de téléchargement pour mon site Web, qui est distinct de WP, mais utilise WP pour fournir des fonctions de base de données de bas niveau et la vérification de l'utilisateur. Pour ce faire, j'inclus wp-load.php dans mon script principal (Uploadify), mais cela semble remplir la mémoire du serveur avec des composants inutiles. Grâce à cela, je constate une erreur dans mon script qui semble pointer vers un plugin installé WP.

Comment puis-je charger uniquement les composants principaux WP et ignorer les plug-ins? Est-ce seulement possible?

11
MechEngineer

Utilisez BackPress , mais j'ai de petits développements, où j'utilise une installation par défaut et une source plus petite via const.

voir sur le wp-settings.php

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

Définissez le const SHORTINIT sur true dans le wp-config.php et observez le fonctionnement rapide. define( 'SHORTINIT', TRUE );

Ce sont les fichiers que vous obtenez:

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

Désactiver complètement les plugins signifie perdre de nombreux avantages.

Il existe des distributions de wordpress qui vont plus loin et suppriment les publications, les liens, etc., mais elles sont toujours en retard sur le noyau de WordPress et ont tendance à ne pas survivre aussi longtemps.

Voici quelques choses qui pourraient être faites

Short Init

Mettre ceci dans votre wp-config.php:

define( 'SHORTINIT', TRUE );

Ou le définir quelque part avant de charger dans wordpress devrait réduire le processus de chargement et le ramener à des fonctions de base minimales.

Installations légères secondaires

Configurez une deuxième installation wordpress, avec uniquement les plugins et les thèmes que vous voulez (le cas échéant). Configurez ensuite le fichier wp-config.php pour utiliser le même répertoire wp-content et les mêmes valeurs de base de données.

Backpress

WordPress, l'original BBpress et glotpress, entre autres, sont construits autour de la bibliothèque BackPress. Vous pouvez utiliser cette option au lieu de WordPress pour effectuer votre travail, même si de nombreuses API et fonctionnalités peuvent être manquantes ou nécessiter une réimplémentation/un portage.

Tables d'options

Je garderais également à l'esprit que WordPress charge la totalité du tableau des options en mémoire pour réduire le nombre de requêtes. Si vous enregistrez des valeurs importantes, cela aura une incidence sur les performances.

Quitter tôt

Vous pouvez également essayer de vous connecter à des fonctions antérieures dans le processus de chargement de WordPress et de quitter le processus PHP avant la fin de WordPress, mais je ne peux pas vous dire à quel point cela serait sûr.

Chargement sélectif des plugins

Il y a aussi cet article sur le chargement sélectif des plugins , mais nécessite des hacks aux fichiers core de WordPress

6
Tom J Nowell

Pour faire fonctionner is_user_logged_in() et current_user_can(), j’ai trouvé une réponse similaire ici (commentaire). La comparsion correspond aux réponses ici, comme suit:

L'utilisation de define('SHORTINIT', true) + require('wp-load.php') + comprend manuellement:

Chargement de la page: 1.05 sek - fichiers inclus: 43 fichiers

Comparaison: utilisation deUNIQUEMENTrequire('wp-load.php'):

Chargement de la page: 1.35 sek - fichiers inclus: 419 fichiers

La différence de temps (0,3 sek) peut différer des installations et des moteurs PHP, mais lors de la validation de nombreuses demandes sur une page, tout s'additionne!/@ Anna Ericson

C'était une bonne idée d'utiliser un appel relatif à WP rép_installé. À partir d'un plugin personnalisé Wordpress "ROOT" comme:

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

Puis dans mon 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' );

Après cela, la validation de l'utilisateur fonctionne pour moi. Merci à @Anna Ericson mots finaux du code original:

Pour d’autres tâches, exécuter sur une ou deux demandes, rechercher d’autres fichiers nécessaires pourrait ne pas valoir 0,3 SEK . Ignore la constante SHORTINIT et encombre manuellement.

3
cavameta

Avez-vous essayé define('SHORTINIT', true);? Je ne l'ai pas testé moi-même, mais il semble charger très peu d'aspects de WP core tout en conservant suffisamment de fonctionnalités, en particulier si vous souhaitez uniquement gérer la base de données.

2
Tomas Buteler