Як додати фрагмент javascript до підніжжя, для якого потрібна jQuery


27

Я знаю, що можу додати файл сценарію до підніжжя wordpress, для якого потрібен jquery за допомогою цього коду:

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

Але що робити, якщо я хочу додати лише звичайний фрагмент вбудованого jquery, а не файл. Як це можна зробити.

Редагувати

Я знаю, що можу використовувати цей скрипт, щоб додати щось до нижнього колонтитулу:

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

Але як вказати сценарій, який використовується, потрібно запустити jquery .


Немає вбудованої функції для цього, як я знаю, саме тому wp_register_scriptі wp_enqueue_scriptіснує, але ви можете перевірити, використовуючи сам jquery.
Wyck

2
Вибачте за скарга, але я не думаю, що ви розумієте моє запитання. Я прочитав кодекс і знаю про варіант. Але я не хочу, щоб wp_enqueue_scriptфайл сценарію у нижній колонтитул, я хочу додати фрагмент у колонтитул, який вимагає jquery. Я відповів на відповідь безпосередньо з кодексу. Я прочитав кодекс і не знайшов відповіді, тому я задаю питання. Якщо ви перенаправите мене до кодексу ще раз, я подаю заявку.
Сайф Бечан

Дякую Вік, я думаю, що це так, дякую, що правильно зрозуміли питання. Я думаю, що я просто використовуватиму зовнішній скрипт JS, ніж впевнений, що сценарій можна запустити.
Сайф Бечан

Відповіді:


30

Найпростіший спосіб зробити це насправді комбінація wp_enqueue_scriptта дії нижнього колонтитулу, на які вже посилаються Saif та v0idless. Я часто використовую jQuery у своїх темах і плагінах, але всі інші сценарії також розміщую в нижньому колонтитулі.

Найкращий спосіб насправді встановити чергу:

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

Але цей фрагмент коду передбачає, що ви є однією чергою сценарію, тобто ви робите це у власному плагіні чи темі.

На даний момент не існує можливості додати строковий сценарій до нижнього колонтитулу WordPress і також завантажити його залежностями. Але є альтернатива, якщо ви хочете.

Альтернатива

Коли WordPress працює зі сценаріями, він завантажує їх всередину об'єкту, щоб відстежувати їх. Всередині об'єкта є 3 списки:

  • зареєстрований
  • чергу
  • зроблено
  • зробити

Коли ви вперше зареєструєте скрипт, wp_register_scripts()він розміщується в зареєстрованому списку. Коли ви wp_enqueue_script()створюєте сценарій, він копіюється до списку черг. Після того, як вона буде надрукована на сторінку, вона додається до списку готових.

Отже, замість того, щоб у черзі сценарію нижнього колонтитулу вимагати jQuery, ви можете документувати, що йому потрібно використовувати jQuery і просто перевірити програмно, щоб переконатися, що jQuery завантажений.

Це використовується wp_script_is()для того, щоб перевірити, де вказаний сценарій.

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

Можливо, ви зможете використовувати цей самий код, щоб змусити jQuery завантажуватись і в нижній колонтитул, але я цього не перевіряв ... тому ваш пробіг мій змінюється.


чи наданий наданий фрагмент коду стандартами розробки плагінів WordPress? Якщо так, то я буду використовувати його у своєму плагіні ... будь ласка, дайте мені відповідь на це ...
laraib

Останній фрагмент? Ні. Плагіни WordPress завжди повинні пред'являти вимоги до сценарію. Примушуючи таким чином jQuery завантажуватися поза системою черг - це лише те, що ви повинні зробити на своєму власному сайті, де ви контролюєте 100% навколишнього середовища. Ні разу не підходить для плагін , щоб зробити це.
EAMann

тоді ви можете дати мені якийсь робочий приклад для цього, будь ласка ... ????
laraib

Оскільки я розробляю свій перший в історії плагін WordPress, і я хотів би, щоб це прийняло команда WordPress ... чекаю будь-якої вашої відповіді, будь ласка .... скажіть про це, щоб я міг створити і прийняти свій плагін ...
laraib

12

Оскільки wordpress 4.5 ви можете додати вбудований скрипт від wp_add_inline_script(). Щоб додати фрагмент javascript до нижнього колонтитулу, який вимагає jQuery, цей код вам допоможе

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 з wordpress jquery


1

Використовуйте wp_footerдію так:

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

1
Це не є гарною відповіддю. Я запитав, як я можу вказати потрібний сценарій jQuery. Якщо у користувача немає jquery запуск, ваша реалізація не запуститься.
Сайф Бечан

0

Я знаю, що ОП хоче вказати вимогу на jQuery, і автори WordPress повинні були дозволити додати фрагменти до сусідніх з файлами сценаріїв, але вони цього не зробили, тому рекомендую не намагатися це змусити. Якщо ви взагалі не хочете возитися з чергою або її порядком, як я (тому що я використовую інші плагіни, що комбінують та оптимізують сценарії), то відповідь дійсно полягає у використанні такої wp_footerдії:

<?php

add_action(
    'wp_footer'
    , function() {
        ?>
        <script>
            if (window.jQuery) {
                // your snippet
            }
        </script>
        <?php
    }
    , 21 # after enqueued footer scripts
);

-2

Ви можете використовувати wp_footerдію для цього. Перевірте кодекс на наявність wp_footer .


Я знаю, але як можна вказати, що сценарій, який ви додаєте в колонтитул, залежить від jquery. Перевірте мою редакцію, щоб бути більш чітким.
Сайф Бечан

Ви навіть не хочете читати кодекс перед тим, як проголосувати відповіді людей? Ви коли-небудь читали про цей in_footerаргумент wp_enqueue_script? Прочитайте це: codex.wordpress.org/Function_Reference/wp_enqueue_script . Це говорить про те, як використовувати його з wp_footerдією.
Rutwick Gangurde
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.