Carregar ambiente mínimo do WordPress


12

Fiz meu próprio serviço de upload para o meu site, que é separado do WP, mas usa o WP para fornecer funções de banco de dados de baixo nível e verificação do usuário. Para fazer isso, incluo wp-load.php no meu script principal (Uploadify), mas isso parece preencher a memória do servidor com componentes desnecessários. Graças a isso, estou vendo um erro no meu script que parece apontar para um plugin WP instalado.

Como carregar apenas os principais componentes do WP e ignorar plugins? Isso é possível?


1
Confira BackPress .
soulseekah

Respostas:


9

Desativar plugins completamente significa que você perde muitas vantagens.

Existem distribuições de wordpress que vão além e arrancam posts e links, etc., mas sempre ficam atrás do núcleo do WordPress e tendem a não sobreviver por tanto tempo.

Aqui estão algumas coisas que poderiam ser feitas

Iniciação curta

Colocando isso no seu wp-config.php:

define( 'SHORTINIT', TRUE );

Ou defini-lo em algum lugar antes de carregar no wordpress, deve reduzir o processo de carregamento e devolvê-lo às funções básicas mínimas.

Instalações leves secundárias

Configure uma segunda instalação do wordpress, apenas com os plugins e temas que você deseja (se houver). Em seguida, configure o wp-config.php para usar os mesmos valores de diretório e banco de dados de conteúdo wp.

Backpress

O WordPress, o BBpress original e o glotpress, entre outros, são criados em torno da biblioteca BackPress. Você pode usar isso em vez do WordPress para fazer seu trabalho, embora várias APIs e recursos estejam ausentes ou precisem ser reimplementados / portados

Tabelas de opções

Eu também tenho em mente que o WordPress carrega toda a tabela de opções na memória para reduzir as consultas, se você estiver salvando algum valor grande nele, isso afetará o desempenho.

Sair cedo

Você também pode tentar conectar-se a funções anteriores no processo de carregamento do WordPress e sair do processo PHP antes que o WordPress seja concluído, mas não posso aconselhar sobre o quão seguro isso seria.

Carregando seletivamente plug-ins

Há também este artigo sobre o carregamento seletivo de plug-ins , mas requer hacks nos arquivos principais do wordpress


+1 Já tentou "Instalações leves secundárias" ?
Kaiser #

Fiz coisas semelhantes, embora nunca com esse objetivo, a maioria dos casos de uso seria melhor atendida por vários sites. Principalmente eu usá-lo para que eu possa ter um desenvolvimento instalar correndo ao lado para que eles compartilhem conteúdo
Tom J Nowell

8

Use BackPress , mas eu tenho pequenos desenvolvimentos, onde eu uso uma instalação padrão e uma fonte menor via const.

veja no wp-settings.php

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

Defina o const SHORTINIT como true no wp-config.phpe veja a execução rápida. define( 'SHORTINIT', TRUE );

Estes são os arquivos que você obtém:

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

Para fazer is_user_logged_in()e current_user_can()trabalhar, encontrei uma resposta semelhante aqui (não posso comentar) A comparsa corresponde às respostas aqui, como:

O uso do define('SHORTINIT', true)+ require('wp-load.php')+ manualmente inclui:

Carregamento de página: 1,05 sek - arquivos incluídos: 43 arquivos

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

Carregamento de página: 1,35 sek - arquivos incluídos: 419 arquivos

A diferença de horário (0,3 sek) pode diferir das instalações e dos mecanismos PHP, mas, ao validar muitas solicitações em um carregamento de página, aumenta-se! / @ Anna Ericson

Foi uma boa ideia usar uma chamada relativa para o diretório instalado do WP. A partir de um plugin personalizado do Wordpress "ROOT", como:

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

Então dentro do meu 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' );

Depois disso, a validação do usuário está funcionando para mim. Graças às palavras finais de @Anna Ericson do código original:

Para outra tarefa, executando uma ou duas solicitações, rastrear outros arquivos necessários pode não valer 0,3 sek . Pule a SHORTINIT desordem constante e manualmente.


1
Esta é a maneira mais limpa até agora. Funcionando bem em chamadas ajax carregando imagens restritas em nossa instalação.
Jonas Lundman 25/10/19

@cavameta Deseja importar o Woocommerce para o wok com o SHORTINIT?
webmastx 23/01

2

Você já tentou define('SHORTINIT', true);? Eu mesmo não testei, mas parece carregar muito poucos aspectos do núcleo do WP, mantendo uma funcionalidade suficiente, especialmente se tudo o que você deseja é lidar com o banco de dados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.