Eu tenho um plugin que chama um script php independente (myAjax.php) através de um script jQuery.ajax () dentro do plugin.
Preciso colocar o seguinte código no arquivo myAjax.php:
require_once('../../../wp-load.php');
if (!is_user_logged_in()){
die("You Must Be Logged In to Access This");
}
if( ! current_user_can('edit_files')) {
die("Sorry you are not authorized to access this file");
}
No entanto, eu gostaria de um método mais à prova de balas para especificar o caminho para o wp-load.php, caso o caminho relativo real seja diferente do meu exemplo.
plugin-development
N2Mystic
fonte
fonte
Respostas:
Você pode usar
__DIR__
constante. Como o arquivo está dentro do plug-in ou da pasta do tema, sempre localizados dentro dawp-content
pasta. Você pode simplesmente obter o caminho do arquivo e aparar tudo awp-content
partir dele:Se você precisa garantir que o wp não esteja dentro de alguma pasta de conteúdo wp (quem sabe? As coisas acontecem) - use lookahead negativo:
(como é mais fácil garantir que o seu próprio plug-in que você está desenvolvendo não esteja localizado em outra pasta wp-content)
Aaand .. você
wp-load
está aí:Mas!
Como os caras mencionados anteriormente, para o AJAX, você pode usar a técnica de ajax nativa do WP-s .
Obviamente, há casos em que a técnica AJAX nativa do WP não é suficiente.
fonte
wp-content
pode estar ausente ou em um diretório completamente diferente do WP.Sei que essa é uma pergunta antiga, mas queria adicionar minha própria resposta, que acho que pode ajudar alguns usuários que tentam alcançar a mesma coisa.
Sim, é sempre melhor (e mais fácil) usar a API nativa do WP Ajax, mas pode ficar muito lenta porque carrega toda a instância do WP.
Minha solução: é bastante simples e deve funcionar para recuperar a
root
instalação do wordpress. Em qualquer script em que você esteja executando a chamada AJAX personalizada, certifique-se de registrar primeiro o scriptwp_register_script()
(não o coloque ainda na fila). Em seguida, usewp_localize_script()
e analise oABSPATH
(esta é uma constante definida dentrowp-load.php
e manterá o caminho raiz). Agora você pode recuperar isso dentro do seu script e analisá-lo junto com a chamada AJAX. Finalmente, é claro, certifique-se de enfileirar o scriptwp_enqueue_script()
.Exemplo:
O snippet PHP abaixo enfileirará seu
script.js
arquivo e permitirá recuperar oroot
diretório chamandopluginslug_scriptname_i18n.wp_root
. Basicamente,wp_localize_script()
é usado para fazer traduções, mas isso também se torna útil para analisar dados nos scripts que você recuperou no servidor.Você
script.js
pode ficar assim:Agora, dentro do seu,
ajax-handler.php
você pode recuperarwp_content_dir
e carregar o seguintewp-load.php
:Lembre-se de que o
wp_root
lado do cliente pode ser alterado.Como uma nota rodapé:
Outro truque que alguns de vocês podem não estar cientes é que, antes de incluir,
wp-load.php
você pode definir uma constante chamadaSHORTINIT
(booleana). Isso instruirá o WordPress a carregar apenas o básico (o que significa que você perderá muitas funções principais do WP), mas acelerará o tempo de carregamento, pois não incluirá todos os arquivos necessários para uma instância regular do WP. O arquivoSHORTINIT
é definido por dentrowp-settings.php
(basta abrir o arquivo e procurarSHORTINIT
. Você entenderá melhor o que está acontecendo sob o capô. Esse truque bacana acelerará ainda mais os tempos de carregamento (até 75% nos meus testes que fiz) Há algum tempo). Mas isso dependerá da versão do WP. Lembre-se também de que aswp-load.php
alterações são frequentes nas novas versões das versões do WP, portanto, se você usarSHORTINIT
certifique-se de que seu script sempre funcione mesmo nas versões futuras do WordPress e também na versão inferior do WordPress. Em resumo, se você fizer coisas complexas que dependem de grande parte do códice do WordPress, certifique-se de NÃO definirSHORTINIT
como verdadeiro .fonte
Você pode usar o código abaixo para usar o wp-load.php para incluir o wp-load de qualquer local
fonte