Je suis tombé sur cela lors de la tentative d'intégration de l' API de sélection de Dropbox à un plugin que j'écris.
La documentation de l'API vous demande de placer la script
balise suivante en haut de votre fichier:
<script type="text/javascript" src="https://www.dropbox.com/static/api/1/dropins.js" id="dropboxjs" data-app-key="MY_APP_KEY"></script>
Tout va bien et bon, et cela fonctionne réellement quand je le colle directement dans la page appelée dans la section admin. Mais, j'aimerais utiliser une variante de wp_register_script (), wp_enqueue_script () et wp_localize_script () pour transmettre l'ID et la clé d'application de données nécessaires.
J'ai essayé quelques variantes différentes de ceci:
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"));
}
Et:
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 est remplacé par la clé d'application appropriée dans mon code. J'apprécierais n'importe quelle direction. Merci.
EDIT: J'ai également essayé de le faire avec un peu de jquery, mais en vain. Je l'ai essayé au chargement du document et sur le document prêt. J'obtiens un {"error": "Invalid app_key"} return.
$('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');
la source
wp_localize_script
- ce que c'est d'imprimer un objet codé json dans la sortie html de la page. Cet objet est reconnu par le script et vous pouvez donc l'utiliser. Ce dont vous avez besoin est d'ajouter des attributs à la balise de script etwp_localize_script
ne peut donc pas vous aider.wp_localize_script
ne crée pas d'attributs de script. Mais est-il possible de passer la clé de l'application directement dans dropbox.js? Juste une supposition, mais avez-vous essayéarray('appKey'=>"MY_APP_KEY")
? C'est le code qui récupère la clé de l'attributif(!Dropbox.appKey){Dropbox.appKey=(e=document.getElementById("dropboxjs"))!=null?e.getAttribute("data-app-key"):void 0}
wp_localize_script
certitude que vous pouvez passer des attributs au script. Je ne sais vraiment pas si cela fonctionnera ou non, mais ce n'est pas une question liée au stress.Réponses:
vous pouvez essayer d'utiliser le
script_loader_src
crochet du filtre, par exemple:Mise à jour
je viens de comprendre que le src est échappé par esc_url, donc en regardant un peu plus, j'ai trouvé le
clean_url
filtre que vous pouvez utiliser pour renvoyer la valeur avec votre identifiant et les données clés de l'application:la source
<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>
Depuis WP 4.1.0, un nouveau crochet de filtre est disponible pour y parvenir facilement:
script_loader_tag
Utilisez-le de cette façon:
la source
OK, il me semble (avec) que ce
wp_enqueque_scripts
n'est pas possible d'imprimer l'identifiant et la clé d'application en tant qu'attributs de balise de script.Je suis sûr à 90%, car
WP_Dependencies
n'est pas un cours que je connais bien, mais en regardant le code ça ne me semble pas possible.Mais je suis sûr à 100% que l'utilisation
wp_localize_script
n'est pas utile pour votre portée .Comme je l'ai dit dans mon commentaire ci-dessus:
Ce que je n'ai pas dit dans le commentaire, c'est que l'objet codé json comme un nom arbitraire que vous décidez, en fait, en regardant la syntaxe:
L'objet nommé
$object_name
pourrait être utilisé par le script car il est dans la portée globale et imprimé dans le html de la page.Mais
$object_name
c'est un nom que vous décidez, donc ça peut être tout .Alors demandez-vous:
comment le script dans le serveur de dropbox distant peut utiliser une variable dont ils ne savent pas comment s'appelle?
Il n'y a donc aucune raison de transmettre l'identifiant et / ou la clé d'application au script avec
wp_localize_script
: il vous suffit de les imprimer en tant qu'attributs de balise de script comme cela est dit dans les documents de l'API Dropbox.Je ne suis pas développeur js, mais je pense que le script dropbox fait:
<script>
éléments html de la pageS'il vous plaît, notez que je ne le sais pas, je suppose .
De cette façon, le script chargé à partir du serveur de dropbox peut vérifier la clé de votre application d'une manière simple pour eux et facile à implémenter pour vous.
Parce que dans la première phrase, j'ai dit qu'il n'était pas possible d'imprimer l'identifiant et la clé d'application dans le script en utilisant
wp_enqueque_scripts
, la morale de l'histoire est que vous devez les imprimer dans le balisage d'une autre manière.Une façon qui ne sent pas trop (quand il n'y a pas d'alternative) est d'utiliser le
wp_print_scripts
hook pour imprimer la balise de script:la source
echo
déclaration ne fait aucune demande HTTP pour autant que je sache , et WordPresswp_enqueue_script
fait également un écho (voir core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/… ) Vous pourriez sûrement réduire le nombre de requêtes en combinant le script avec un autre script que vous avez mais: 1) les scripts existent dans un serveur tiers dans ce cas 2) avec HTTP 2 de nos jours, la combinaison du script réduirait les performances, pas les augmenterait. Alors peut-être que je manque quelque chose?D'après la réponse de Bainternet ci-dessus. Ce code a fonctionné pour moi.
Edit: La seule différence avec le code Bainternet est que j'ai ajouté une condition pour vérifier si l'URL du script est dropbox et s'il s'agit d'un fichier .js.
J'ignore toutes les autres URL et réécris l'URL de la boîte de dépôt.
la source
J'ai fait quelques vérifications dans le code dropbox.js (v2) pour voir ce qui se passait et comment le résoudre au mieux. Il s'avère que la clé d'application de données n'est utilisée que pour définir la variable Dropbox.appKey. J'ai pu définir la variable avec la ligne supplémentaire suivante.
En utilisant l'exemple javascript sur la page Dropbox https://www.dropbox.com/developers/dropins/chooser/js :
Dans mon code, j'ai défini Dropbox.appKey à chaque endroit où je fais référence aux routines javascript Dropbox. Faire cela m'a permis d'utiliser wp_enqueue_script () sans les paramètres supplémentaires.
la source
Je l'ai fait avec mon plugin eCards et c'est vraiment simple.
Voici un copier / coller direct du plugin:
Notez que la clé API est transmise via une option.
la source
Il existe un moyen plus simple de le faire
la source
Syntaxe Wordpress pour script_loader_tag :
Pour ajouter un attribut, vous pouvez modifier votre $ tag de cette façon:
Qui échappera correctement à l'URL.
la source
Merci pour toutes les publications, ils ont vraiment aidé. J'ai fait rouler ma propre version pour lui donner une certaine structure et la rendre plus facile à lire et à mettre à jour. Utilisez la mise en file d'attente comme d'habitude, utilisez le script pour les fichiers CSS avec une fausse balise à la fin afin qu'elle se charge en haut. Bien qu'il puisse probablement être quelque peu simplifié.
la source