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 .


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ć.


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


1

Użyj następującej wp_footerakcji:

add_action( 'wp_footer', 'wpse33008');
function wpse33008() {
?>
<script type="text/javascript">
    /** INSERT SCRIPT HERE **/
</script>
<?php
}

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

-2

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.