Cargue el entorno mínimo de WordPress

12

Hice mi propio servicio de carga para mi sitio web que está separado de WP, pero usa WP para proporcionar funciones de db de bajo nivel y verificación de usuario. Para hacer eso, incluyo wp-load.php en mi script principal (Uploadify), pero hacerlo parece llenar la memoria del servidor con componentes innecesarios. Gracias a eso, veo un error en mi script que parece apuntar a un complemento WP instalado.

¿Cómo puedo cargar solo los componentes principales de WP e ignorar los complementos? ¿Es esto posible?

Ingeniero Mecánico
fuente
1
Echa un vistazo a BackPress .
soulseekah

Respuestas:

9

Deshabilitar los complementos por completo significa que pierdes muchas ventajas.

Hay distribuciones de wordpress que van más allá y eliminan publicaciones y enlaces, etc., pero siempre van a la zaga del núcleo de WordPress y tienden a no sobrevivir tanto tiempo.

Aquí hay algunas cosas que podrían hacerse.

Inicia breve

Poniendo esto en su wp-config.php:

define( 'SHORTINIT', TRUE );

O definirlo en algún lugar antes de cargar en WordPress, debería reducir el proceso de carga y devolverlo a las funciones básicas mínimas.

Instalaciones secundarias ligeras

Configure una segunda instalación de WordPress, con solo los complementos y temas que desee (si corresponde). Luego configure wp-config.php para usar el mismo directorio wp-content y los valores de la base de datos.

Presionar

WordPress, el original BBpress y glotpress, entre otros, están construidos alrededor de la biblioteca BackPress. Puede usar esto en lugar de WordPress para hacer su trabajo, aunque pueden faltar numerosas API y características o necesitar una nueva implementación / portabilidad

Tablas opcionales

También debería tener en cuenta que WordPress carga toda la tabla de opciones en la memoria para reducir las consultas, si guarda valores grandes allí afectará el rendimiento.

Salir temprano

También puede intentar conectarse a funciones anteriores en el proceso de carga de WordPress y salir del proceso de PHP antes de que WordPress termine, pero no puedo aconsejarle qué tan seguro sería eso.

Carga selectiva de complementos

También hay este artículo sobre la carga selectiva de complementos , pero requiere piratería en los archivos principales de WordPress

Tom J Nowell
fuente
+1 ¿Alguna vez probaste "Instalaciones ligeras secundarias" ?
kaiser
He hecho cosas similares, aunque nunca para este propósito, la mayoría de los casos de uso serían mejor atendidos por múltiples sitios. Principalmente lo uso para poder tener una instalación de desarrollo ejecutándose junto a ellos para que compartan contenido
Tom J Nowell
8

Uso BackPress , pero tengo pequeños desarrollos, donde uso una instalación predeterminada y una fuente más pequeña a través de const.

ver en el wp-settings.php

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

Establezca el const SHORTINIT en verdadero en el wp-config.phpy vea la ejecución rápida. define( 'SHORTINIT', TRUE );

Estos son los archivos que obtienes:

// 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
fuente
6

Para hacer is_user_logged_in()y current_user_can()trabajar, encontré una respuesta similar aquí (No puedo comentar) La comparación coincide con las respuestas aquí, como:

Usar define('SHORTINIT', true)+ require('wp-load.php')+ manualmente incluye:

Carga de página: 1.05 sek - archivos incluidos: 43 archivos

Comparando: Usando SOLO require('wp-load.php') :

Carga de la página: 1.35 sek - archivos incluidos: 419 archivos

La diferencia horaria (0.3 sek) puede diferir de las instalaciones y los motores PHP, pero al validar muchas solicitudes en una carga de página, ¡las cosas se suman! / @ Anna Ericson

Fue una buena idea utilizar una llamada relativa al directorio instalado de WP. Desde un plugin personalizado de Wordpress "ROOT" como:

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

Luego dentro de mi 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' );

Después de esto, la validación del usuario funciona para mí. Gracias a @Anna Ericson palabras finales del código original:

Por otra tarea, que se ejecuta en una o dos solicitudes, localizar a otros archivos necesarios podrían no valer 0,3 sek . Omita el SHORTINIT desorden constante y manual.

cavameta
fuente
1
Esta es la forma más limpia hasta ahora. Funciona bien en llamadas ajax cargando imágenes restringidas en nuestra instalación.
Jonas Lundman
@cavameta ¿Cómo importar Woocommerce para wok con SHORTINIT?
webmastx
2

¿Lo has intentado define('SHORTINIT', true);? No lo he probado yo mismo, pero parece cargar muy pocos aspectos del núcleo de WP mientras conserva la funcionalidad suficiente, especialmente si todo lo que quiere es tratar con la base de datos.

Tomás Buteler
fuente