Eu me deparei com isso ao tentar integrar a gota do Dropbox na API do seletor a um plug-in que estou escrevendo.
A documentação da API instrui você a colocar a seguinte script
tag na parte superior do seu arquivo:
<script type="text/javascript" src="https://www.dropbox.com/static/api/1/dropins.js" id="dropboxjs" data-app-key="MY_APP_KEY"></script>
Tudo bem e bem, e na verdade funciona quando colo diretamente na página chamada na seção admin. Mas, eu gostaria de usar algumas variações de wp_register_script (), wp_enqueue_script () e wp_localize_script () para passar a identificação necessária e a chave de aplicativo de dados.
Eu tentei algumas variações diferentes disso:
add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_js() {
wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
wp_enqueue_script('dropbox.js');
wp_localize_script('dropbox.js','dropboxdata',array('id'=>"dropboxjs",'data-app-key'=>"MY_APP_KEY"));
}
E:
add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_stuff() {
wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
wp_enqueue_script('dropbox.js');
wp_localize_script('dropbox.js','dropboxdata',array(array('id'=>"dropboxjs"),array('data-app-key'=>"MY_APP_KEY")));
}
MY_APP_KEY é substituído pela chave apropriada do aplicativo no meu código. Apreciaria qualquer direção. Obrigado.
EDIT: Também tentei fazê-lo com algum jquery, mas sem sucesso. Tentei no carregamento do documento e no documento pronto. Recebo um retorno de {"error": "app_key inválido"}.
$('script[src="https://www.dropbox.com/static/api/1/dropins.js?ver=3.6"]').attr('id','dropboxjs').attr('data-multiselect','true').attr('data-app-key','MY_APP_KEY');
fonte
wp_localize_script
fazer é imprimir um objeto codificado em json na saída html da página. Este objeto é reconhecido pelo script e, portanto, você pode usá-lo. O que você precisa é adicionar alguns atributos à tag de script e, portanto,wp_localize_script
não pode ajudá-lo.wp_localize_script
não cria atributos de script. Mas é possível passar a chave do aplicativo diretamente no dropbox.js? Apenas um palpite, mas você já tentouarray('appKey'=>"MY_APP_KEY")
? Este é o código que agarra a chave do atributoif(!Dropbox.appKey){Dropbox.appKey=(e=document.getElementById("dropboxjs"))!=null?e.getAttribute("data-app-key"):void 0}
wp_localize_script
certeza você pode passar atributos para o script. Eu realmente não sei se isso vai funcionar ou não, no entanto, não é um assunto relacionado ao worpress.Respostas:
você pode tentar usar o
script_loader_src
gancho de filtro, por exemplo:Atualizar
Eu apenas descobri que o src é escapado por esc_url, então, procurando um pouco mais, encontrei o
clean_url
filtro que você pode usar para retornar o valor com seus dados-chave de identificação e aplicativo:fonte
<script type='text/javascript' src='https://www.dropbox.com/static/api/1/dropins.js?ver=3.6'id='dropboxjs'data-app-key='MY_APP_KEY'></script>
Desde o WP 4.1.0, um novo gancho de filtro está disponível para isso facilmente:
script_loader_tag
Use desta maneira:
fonte
OK, parece (para mim) que
wp_enqueque_scripts
não é possível imprimir o ID e a chave do aplicativo como atributos da tag de script.Tenho certeza de 90%, porque
WP_Dependencies
não é uma classe que eu conheço bem, mas olhando o código Parece-me impossível.Mas tenho 100% de certeza de que o uso não
wp_localize_script
é útil para o seu escopo .Como eu disse no meu comentário acima:
O que eu não disse no comentário é que o objeto codificado em json como um nome arbitrário que você decide, de fato, olhando para a sintaxe:
O objeto nomeado
$object_name
poderia ser usado pelo script porque está no escopo global e impresso no html da página.Mas o
$object_name
é um nome que você decide, para que possa ser tudo .Então pergunte a si mesmo:
como o script no servidor dropbox remoto pode fazer uso de uma variável que eles não sabem como é chamada?
Portanto, não há nenhuma razão para passar a ID e / ou a chave do aplicativo para o script
wp_localize_script
: basta imprimi-los como atributos de tag de script, como é dito nos documentos da API do Dropbox.Não sou desenvolvedor js, mas acho que o script do dropbox é:
<script>
elementos html na páginaPor favor, note que eu não sei disso com certeza, estou apenas supondo .
Dessa forma, o script carregado no servidor da caixa de depósito pode verificar a chave do aplicativo de uma maneira fácil para eles e fácil de implementar para você.
Como na primeira frase eu disse que não é possível imprimir o ID e a chave do aplicativo no script
wp_enqueque_scripts
, a moral da história é que você deve imprimi-los na marcação de outra maneira.Uma maneira que não cheira muito (quando não há alternativas) é usar
wp_print_scripts
hook para imprimir a tag de script:fonte
echo
declaração não faz nenhuma solicitação HTTP, tanto quanto eu posso dizer, e o WordPress tambémwp_enqueue_script
faz eco (consulte core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/… ). Certamente você pode reduzir o número de solicitações combinando o script com outro script que você possui, mas: 1) os scripts existem no servidor de terceiros, neste caso 2) com o HTTP 2 atualmente combinando o script reduziria o desempenho, não os aumentaria. Então, talvez eu perca alguma coisa?Da resposta de Bainternet acima. Este código funcionou para mim.
Edit: A única diferença do código Bainternet é que eu adicionei uma condição para verificar se o URL do script é dropbox e se é um arquivo .js.
Estou ignorando todos os outros URLs e reescrevendo o URL da caixa de depósito.
fonte
Fiz algumas checagens no código dropbox.js (v2) para ver o que estava acontecendo e a melhor forma de solucionar isso. Como se vê, a chave de aplicativo de dados é usada apenas para definir a variável Dropbox.appKey. Eu sou capaz de definir a variável com a seguinte linha extra.
Usando o exemplo javascript na página do Dropbox https://www.dropbox.com/developers/dropins/chooser/js :
No meu código, defino o Dropbox.appKey em todos os lugares em que faço referência às rotinas javascript do Dropbox. Fazer isso me permitiu usar wp_enqueue_script () sem os parâmetros extras.
fonte
Eu fiz isso com meu plug-in eCards e é realmente simples.
Aqui está uma cópia / colagem direta do plug-in:
Observe que a chave da API é passada através de uma opção.
fonte
Existe uma maneira mais simples de fazer isso
fonte
Sintaxe do Wordpress para script_loader_tag :
Para adicionar qualquer atributo, você pode modificar sua tag $ desta maneira:
O que escapará corretamente do URL.
fonte
Obrigado por todas as publicações, eles realmente ajudaram. Eu rolei minha própria versão para dar a ela alguma estrutura e facilitar a leitura e a atualização. Use o enfileiramento normalmente, use o script para arquivos CSS com uma tag falsa no final, para que seja carregado na parte superior. Embora provavelmente possa ser um pouco simplificado.
fonte