Se eu tivesse que fazer isso, usaria meu próprio cookie para determinar o login e carregaria apenas o WordPress para verificar quando necessário.
O cookie wordpress_logged_in_ {some-hash} pode ser usado para determinar o usuário, e o WordPress usa para determinar o mesmo. Você não pode reimplementar isso facilmente, mas pode usá-lo sem carregar o WordPress em várias solicitações.
Por exemplo, aqui está o meu hash de cookie (dados completamente compostos, mas realistas):
key: wordpress_logged_in_1234567890abcdef1234567890abcdef
value: admin|1234567890|abcdef1234567890abcdef1234567890
A maneira como o WordPress sabe como esse cookie é válido é irrelevante, tudo o que você precisa saber é se é válido uma vez e depois assina-o com um segredo.
Então, pela primeira vez, o usuário ainda não está comprovado. Você carrega o wp-load.php e o WP valida o cookie e efetua login no usuário. Agora você faz o que faz para provar a si mesmo que o usuário está logado e, em seguida, define seu próprio cookie. A chave pode ser qualquer coisa personalizada para você, o valor que você cria em um resumo da mensagem com uma chave secreta usando a função hash_hmac.
$key = ... // the key from the WP cookie
$value = ... // the value from the WP cookie
$hash = hash_hmac ( 'md5' , $key.$value , 'some secret key' );
Você receberá respostas sem sentido, que serão enviadas usando setcookie (). Em solicitações futuras, eles enviarão esse cookie de volta para você. Você pode verificar isso primeiro e validá-lo usando a mesma função hash e chave secreta.
Somente você pode gerar o hash porque somente você conhece a chave secreta. Portanto, se eles enviarem de volta um hash válido que também corresponda ao que eles enviam para o cookie WP, você saberá que eles foram validados com o WP, por meio do seu código, antes, e poderá obter o nome de usuário com esse valor (é o primeiro parte do cookie, obviamente). Então você não precisa carregar o WP.
A chave secreta, BTW, deve ser longa e aleatória . Não é uma senha curta. Não é uma palavra do dicionário. Apenas grandes bobagens absurdas. Ruído de linha e muito. Chave de exemplo:
'GHY5hFNqq4Ntdu=3:SUp8#/+_W!- @@^@xslN*L|N+Vn;(1xo8jNyp,au$v9Ki5*'
Para o Wordpress 4.9: Como não posso comentar (novo usuário). A alma final (instalação única do WP) que eu uso para fazer
is_user_logged_in()
ecurrent_user_can()
trabalhar é a seguinte. Nósrequire('wp-load.php')
primeiro (para pular wp () na carga-blog-header.php) , e obterABSPATH
constante, então, inclui manualmente exatamente todo o material necessário.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!
Lembre-se de usar a chamada relativa ao diretório instalado do WP. Em um diretório de plug-in personalizado do Wordpress, dentro de um nível de subdiretação, instalação normal, um caminho deve ser como:
Então:
Depois disso, a validação do usuário está acessível. Para outras tarefas, executando uma ou duas solicitações , rastrear outros arquivos necessários pode não valer 0,3 segundos. Pule a
SHORTINIT
desordem constante e manualmente.fonte
O próprio Wordpress está ativado ou desativado. Às vezes, mas isso é apenas por acaso e não por design, você pode contornar isso. Mas no seu caso, não tenho muita certeza se é possível.
Em vez de
wp-blog-header.php
você pode tentar carregar apenas as funções WP, incluawp-load.php
. Talvez isso ajude.fonte
wp-blog-header.php
basicamente cargaswp-load.php
por isso não há diffrence ...wp();
que é realmente muito caro.wp-load.php
vez dewp-blog-header.php
, tudo parece funcionar bem, mas o tempo de carregamento é o mesmo.Você pode tentar acessar a tabela diretamente. Se você conhece o sal dos arquivos de senhas, pode fazê-los fazer login através do seu próprio sistema, salte a senha você mesmo (veja como o wordpress faz isso) e acompanhe você mesmo. Se você deseja navegar entre o seu próprio sistema e o wordpress sem re-autenticação, você pode criar um plugin para o wordpress que transmita a sessão atual dos usuários ao seu sistema.
fonte
O mais rápido que você pode obter com o WP é criar um invólucro personalizado que definirá
SHORTINIT
e depois carregará o núcleo. Isso fará com que o carregamento principal pare logo após o banco de dados ser conectado e antes que a maioria das APIs e extensões (tema e plug-ins) sejam processadas.A partir daí, você pode tentar acessar o banco de dados sozinho ou carregar seletivamente partes do núcleo necessárias.
Essa é uma abordagem bastante confusa, mas é tão próxima da carga do núcleo mais leve quanto as coisas acontecem no WP.
fonte
Parece que já houve discussão sobre isso. Portanto, verifique as atualizações em: https://core.trac.wordpress.org/ticket/37584
fonte
Se você quiser permitir que todos os usuários do Wordpress usem o aplicativo da Web, use o sistema de gerenciamento de usuários do Wordpress e verifique se o usuário está logado ou não.
Para verificar isso, você precisará verificar se o cookie nomeado
wordpress_logged_in_{some-hash}
está presente. Caso contrário, redirecione o usuário para a página de login do Wordpress. A{some-hash}
parte do nome do cookie é apenas uma série de letras e dígitos.fonte