Cum să adaugi un snippet javascript în footer care necesită jQuery
Știu că pot adăuga un fișier script în footer-ul WordPress care necesită jquery folosind acest cod:
<?php
function my_scripts_method() {
// înregistrează locația scriptului, dependențele și versiunea
wp_register_script('custom_script',
get_template_directory_uri() . '/js/custom_script.js',
array('jquery'),
'1.0',
true);
// încarcă scriptul
wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>
Dar ce se întâmplă dacă vreau să adaug doar un snippet normal de jquery inline, nu un fișier. Cum poate fi făcut acest lucru.
Editare
Știu că pot folosi acest script pentru a adăuga ceva în footer:
<?php
function myscript() {
?>
<script type="text/javascript">
// Acesta depinde de jquery
</script>
<?php
}
add_action('wp_footer', 'myscript');
Dar cum specific faptul că scriptul utilizat necesită jquery pentru a rula.

Cea mai ușoară metodă de a face acest lucru este de fapt o combinație între wp_enqueue_script
și acțiunile din footer la care Saif și v0idless s-au referit deja. Folosesc frecvent jQuery în temele și plugin-urile mele, dar pun toate celelalte scripturi și în footer.
Cea mai bună metodă de a încărca aceste elemente ar fi următoarea:
function myscript() {
?>
<script type="text/javascript">
if ( undefined !== window.jQuery ) {
// script dependent pe jQuery
}
</script>
<?php
}
add_action( 'wp_footer', 'myscript' );
function myscript_jquery() {
wp_enqueue_script( 'jquery' );
}
add_action( 'wp_head' , 'myscript_jquery' );
Dar acest fragment de cod presupune că tu ești cel care încarcă scriptul, adică faci acest lucru în propriul tău plugin sau temă.
În prezent, nu există nicio metodă de a adăuga un script inline în footerul WordPress și, în același timp, de a-l încărca cu dependințe. Dar există o alternativă, dacă ești dispus.
Alternativa
Când WordPress lucrează cu scripturi, le încarcă intern într-un obiect pentru a le ține evidența. Există practic 3 liste în interiorul obiectului:
- înregistrate (registered)
- coadă (queue)
- finalizate (done)
- de făcut (to_do)
Când înregistrezi pentru prima dată un script cu wp_register_scripts()
, acesta este plasat în lista de înregistrate. Când folosești wp_enqueue_script()
, scriptul este copiat în lista de coadă. După ce este afișat pe pagină, este adăugat în lista de finalizate.
Deci, în loc să încarci scriptul din footer cu dependința de jQuery, poți documenta că acesta trebuie să folosească jQuery și să verifici programatic dacă jQuery este încărcat.
Această metodă folosește wp_script_is()
pentru a verifica unde se află scriptul în listă.
function myscript() {
if( wp_script_is( 'jquery', 'done' ) ) {
?>
<script type="text/javascript">
// script dependent pe jQuery
</script>
<?php
}
}
add_action( 'wp_footer', 'myscript' );
S-ar putea să poți folosi același cod pentru a forța încărcarea jQuery în footer, dar nu am testat acest lucru... deci rezultatele pot varia.

fragmentul de cod pe care l-ai furnizat este acceptat conform standardelor de dezvoltare a plugin-urilor WordPress? Dacă da, atunci îl voi folosi în plugin-ul meu... te rog să îmi dai un răspuns în legătură cu asta...

Ultimul fragment? Nu. Plugin-urile WordPress ar trebui să încarce întotdeauna cerințele de scripturi folosind sistemul de coadă. Forțarea încărcării jQuery în afara sistemului de coadă în acest fel este ceva ce ar trebui să faci doar pe propriul site, unde controlezi 100% mediul. Nu este niciodată potrivit ca un plugin să facă asta.

atunci poți să îmi dai un exemplu funcțional pentru asta, te rog...????

Începând cu WordPress 4.5, puteți adăuga scripturi inline folosind wp_add_inline_script()
. Pentru a adăuga un fragment de cod JavaScript în footer care necesită jQuery, acest cod vă poate ajuta:
function enqueue_jquery_in_footer( &$scripts ) {
if ( ! is_admin() )
$scripts->add_data( 'jquery', 'group', 1 );
}
add_action( 'wp_default_scripts', 'enqueue_jquery_in_footer' );
function theme_prefix_enqueue_script() {
if(!wp_script_is('jquery', 'done')) {
wp_enqueue_script('jquery');
}
wp_add_inline_script( 'jquery-migrate', 'jQuery(document).ready(function(){});' );
}
add_action( 'wp_enqueue_scripts', 'theme_prefix_enqueue_script' );

Știu că OP dorește să specifice o cerință pentru jQuery, iar autorii WordPress ar fi trebuit să permită includerea fragmentelor de cod alături de fișierele de script, dar nu au făcut-o, așa că recomand să nu încercați să forțați acest lucru. Dacă nu doriți să vă amestecați în coadă sau în ordinea ei, ca mine (pentru că folosesc alte plugin-uri care combină și optimizează scripturile), atunci răspunsul este să utilizați acțiunea wp_footer
astfel:
<?php
add_action(
'wp_footer'
, function() {
?>
<script>
if (window.jQuery) {
// fragmentul tău de cod
}
</script>
<?php
}
, 21 # după scripturile încărcate în footer
);

Poți folosi acțiunea wp_footer
pentru a face acest lucru. Consultă codex-ul pentru wp_footer.

Știu, dar cum poți specifica că scriptul pe care îl adaugi în footer depinde de jQuery. Verifică ediția mea pentru a fi mai specific.

Chiar te deranjezi să citești în Codex înainte de a da voturi negative la răspunsurile oamenilor? Ai citit vreodată despre argumentul in_footer
pentru wp_enqueue_script
? Citește asta: http://codex.wordpress.org/Function_Reference/wp_enqueue_script. Îți explică cum să-l folosești cu acțiunea wp_footer
.
