Jak dodać fragment kodu javascript do stopki wymagającej jQuery

27

Wiem, że mogę dodać plik skryptu do stopki Wordpress, która wymaga jquery przy użyciu tego kodu:

<?php
function my_scripts_method() {
   // register your script location, dependencies and version
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery'),
       '1.0',
       true);
   // enqueue the script
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

Ale co, jeśli chcę dodać tylko zwykły fragment wbudowanej jquery, a nie plik. Jak można to zrobić.

Edytować

Wiem, że mogę użyć tego skryptu, aby dodać coś do stopki:

<?php
function myscript() {
?>
<script type="text/javascript">
 // This depends on jquery
</script>
<?php
}
add_action('wp_footer', 'myscript');

Ale jak określić używany skrypt wymaga uruchomienia jquery .

Saif Bechan
źródło
Nie ma wbudowanej funkcji, która by to zrobiła, wiem o tym, dlatego wp_register_scripti wp_enqueue_scriptistnieje, ale możesz to sprawdzić za pomocą samej jquery.
Wyck
2
Przepraszam za opinię, ale nie sądzę, że rozumiesz moje pytanie. Przeczytałem kodeks i wiem o tej opcji. Ale nie chcę, aby wp_enqueue_scriptplik skryptu znajdował się w stopce, chcę dodać fragment do stopki, który wymaga jquery. Głosowałem za odpowiedzią pobraną bezpośrednio z kodeksu. Przeczytałem kodeks i nie znalazłem odpowiedzi, dlatego zadaję pytanie. Jeśli ponownie przekierujesz mnie do kodeksu, głosuję za.
Saif Bechan,
Dzięki wyck, myślę, że tak jest, dziękuję za prawidłowe zrozumienie pytania. Myślę, że zamiast tego użyję zewnętrznego skryptu JS, aby upewnić się, że skrypt można uruchomić.
Saif Bechan,

Odpowiedzi:

30

Najłatwiejszym sposobem na to jest połączenie działań wp_enqueue_scripti stopek, o których wspominali już Saif i v0idless. Często używam jQuery w moich motywach i wtyczkach, ale umieszczam również wszystkie pozostałe skrypty w stopce.

Najlepszym sposobem na kolejkowanie rzeczy jest:

function myscript() {
?>
<script type="text/javascript">
  if ( undefined !== window.jQuery ) {
    // script dependent on jQuery
  }
</script>
<?php
}
add_action( 'wp_footer', 'myscript' );

function myscript_jquery() {
    wp_enqueue_script( 'jquery' );
}
add_action( 'wp_head' , 'myscript_jquery' );

Ale ten wycięty kod zakłada, że ​​to ty ustawiasz się w kolejce skryptu, tzn. Robisz to we własnej wtyczce lub motywie.

W tej chwili nie ma sposobu, aby dodać skrypt wbudowany do stopki WordPress, a także załadować go z zależnościami. Ale istnieje alternatywa, jeśli chcesz.

Alternatywa

Kiedy WordPress działa ze skryptami, ładuje je wewnętrznie do obiektu, aby je śledzić. Wewnątrz obiektu znajdują się zasadniczo 3 listy:

  • zarejestrowany
  • kolejka
  • gotowy
  • do zrobienia

Kiedy po raz pierwszy rejestrujesz skrypt, wp_register_scripts()który znajduje się na liście zarejestrowanych. Kiedy wp_enqueue_script()skrypt, to skopiowane do listy kolejki. Po wydrukowaniu na stronie jest dodawany do listy ukończonych.

Zamiast więc ustawiać skrypt stopki w kolejce, aby wymagał jQuery, możesz udokumentować , że musi on używać jQuery i po prostu sprawdzić programowo, aby upewnić się, że jQuery jest załadowany.

Służy wp_script_is()do sprawdzania, gdzie znajduje się skrypt.

function myscript() {
    if( wp_script_is( 'jquery', 'done' ) ) {
    ?>
    <script type="text/javascript">
      // script dependent on jQuery
    </script>
    <?php
    }
}
add_action( 'wp_footer', 'myscript' );

Być może możesz użyć tego samego kodu, aby zmusić jQuery do załadowania się również w stopce, ale tego nie testowałem ... więc twój przebieg może się różnić.

EAMann
źródło
czy dostarczony fragment kodu jest akceptowany przez standardy rozwoju wtyczek WordPress? Jeśli tak, to
użyję
Ostatni fragment? Nie. Wtyczki WordPress powinny zawsze kolejkować wymagania dotyczące skryptów. Zmuszanie jQuery do ładowania poza system kolejek w ten sposób jest tylko czymś, co powinieneś zrobić na własnej stronie, w której kontrolujesz 100% środowiska. To nigdy odpowiednie dla wtyczki, aby to zrobić.
EAMann,
czy możesz mi podać jakiś działający przykład tego ... ????
laraib
Ponieważ opracowuję swoją pierwszą w historii wtyczkę WordPress i chciałbym, aby została zaakceptowana przez zespół WordPress ... czekam na każdą odpowiedź, proszę ... zabieraj głos w tej sprawie, aby móc utworzyć i zaakceptować moją wtyczkę ...
laraib,
12

Od wordpress 4.5 możesz dodać skrypt wbudowany przez wp_add_inline_script(). Aby dodać fragment kodu javascript do stopki wymagającej jQuery, ten kod pomaga

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' );

wp_add_inline_script z jquery wordpress

Dhinju Divakaran
źródło
1

Użyj następującej wp_footerakcji:

add_action( 'wp_footer', 'wpse33008');
function wpse33008() {
?>
<script type="text/javascript">
    /** INSERT SCRIPT HERE **/
</script>
<?php
}
v0idless
źródło
1
To nie jest dobra odpowiedź. Zapytałem, jak mogę określić wymagany skrypt jQuery. Jeśli użytkownik nie uruchomi jquery, implementacja nie zostanie uruchomiona.
Saif Bechan
0

Wiem, że OP chce określić wymaganie dotyczące jQuery, a autorzy WordPressa powinni zezwolić na kolejkowanie fragmentów przylegających do plików skryptów, ale nie zrobili tego, więc nie zalecam wymuszania tego. Jeśli nie chcesz w ogóle zadzierać z kolejką lub jej kolejnością, tak jak ja (ponieważ korzystam z innych wtyczek, które łączą i optymalizują skrypty), wtedy odpowiedź jest wp_footertaka:

<?php

add_action(
    'wp_footer'
    , function() {
        ?>
        <script>
            if (window.jQuery) {
                // your snippet
            }
        </script>
        <?php
    }
    , 21 # after enqueued footer scripts
);
Walf
źródło
-2

W tym celu możesz użyć wp_footerakcji. Sprawdź kodeks dla wp_footer .

Rutwick Gangurde
źródło
Wiem, ale jak możesz określić, że skrypt dodawany do stopki zależy od jquery. Sprawdź moją edycję, aby była bardziej szczegółowa.
Saif Bechan,
Czy w ogóle zastanawiasz się, czy przeczytać kodeks przed głosowaniem nad odpowiedziami ludzi? Czy kiedykolwiek czytałeś o in_footerkłótni wp_enqueue_script? Przeczytaj to: codex.wordpress.org/Function_Reference/wp_enqueue_script . Mówi ci, jak używać go z wp_footerakcją.
Rutwick Gangurde