Як додати фрагмент 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.