Carregue o ambiente mínimo do WordPress

11

Eu 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 baixo nível de banco de dados e verificação do usuário. Para fazer isso, eu incluo wp-load.php no meu script principal (Uploadify), mas fazer 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 posso carregar apenas os componentes principais do WP e ignorar os plugins? Isso é possível?

    
por MechEngineer 03.04.2012 / 20:09

4 respostas

6

Use o BackPress , mas tenho pequenos desenvolvimentos, onde 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 SHORTINIT const em true no wp-config.php e veja a execução rápida. define( 'SHORTINIT', TRUE );

Estes são os arquivos que você recebe:

// 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'
    
por bueltge 05.04.2012 / 14:03
5

Desativar plug-ins significa que você perde muitas vantagens.

Existem distribuições do wordpress que vão além e rasgam 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 podem 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 puxá-lo de volta para funções básicas mínimas.

Instalações leves secundárias

Configure uma segunda instalação do wordpress, com apenas 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 do wp-content.

Backpress

WordPress, o BBpress e glotpress original, entre outros, são construídos em torno da biblioteca do BackPress. Você poderia usar isso em vez do WordPress para fazer o seu trabalho, embora várias APIs e recursos possam estar faltando ou precisem ser reimplementados / portados

Tabelas de opções

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

Saindo cedo

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

Carregamento seletivo de plugins

Há também este artigo sobre o carregamento seletivo de plugins , mas requer hacks para o wordpress arquivos principais

    
por Tom J Nowell 03.04.2012 / 20:20
2

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

    
por Tomas Buteler 05.04.2012 / 13:40
2

Para fazer is_user_logged_in() e current_user_can() funcionar, encontrei uma resposta semelhante aqui (Cant comment) O comparsion combina respostas aqui, como:

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

Pageload: 1,05 sek - arquivos incluídos: 43 arquivos

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

Pageload: 1.35 sek - arquivos incluídos: 419 arquivos

  

A diferença de tempo (0.3 sek) pode diferir das instalações e do PHP   motores, mas ao validar muitos pedidos em um pageload -coisas   acrescenta-se! / @ Anna Ericson

Foi uma boa ideia usar uma chamada relativa para o diretório instalado do WP. 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 da @Anna Ericson do código original:

  

Para outra tarefa, executando uma ou duas solicitações, rastreando outras   os arquivos necessários podem não valer 0,3 sek . Ignore o SHORTINIT   desordem constante e manual.

    
por cavameta 25.10.2018 / 11:21

Tags