Как добавить JavaScript-сниппет в футер, который требует jQuery

6 нояб. 2011 г., 12:30:44
Просмотры: 86.9K
Голосов: 30

Я знаю, что могу добавить файл скрипта в футер wordpress, который требует jquery, используя этот код:

<?php
function my_scripts_method() {
   // регистрируем расположение скрипта, зависимости и версию
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery'),
       '1.0',
       true);
   // подключаем скрипт
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

Но что если я хочу добавить обычный сниппет jquery непосредственно в код, а не в файл. Как это можно сделать?

Редактирование

Я знаю, что могу использовать этот скрипт для добавления чего-либо в футер:

<?php
function myscript() {
?>
<script type="text/javascript">
 // Это зависит от jquery
</script>
<?php
}
add_action('wp_footer', 'myscript');

Но как указать, что используемый скрипт требует jquery для работы?

3
Комментарии

Насколько мне известно, встроенной функции для этого не существует, именно поэтому существуют wp_register_script и wp_enqueue_script, но вы можете проверить с помощью самого jQuery.

Wyck Wyck
6 нояб. 2011 г. 17:42:50

Извините за минус, но, кажется, вы не поняли мой вопрос. Я читал codex и знаю об этой опции. Но я не хочу добавлять файл скрипта в подвал через wp_enqueue_script, я хочу добавить фрагмент кода в подвал, который требует jQuery. Я поставил минус ответу, который просто взят из codex. Я читал codex и не нашел ответа, поэтому задаю вопрос. Если вы снова отправите меня в codex, я поставлю минус.

Saif Bechan Saif Bechan
6 нояб. 2011 г. 17:46:09

Спасибо, wyck, думаю, это тот случай, спасибо за правильное понимание вопроса. Пожалуй, я просто использую внешний JS-скрипт, чтобы быть уверенным, что скрипт сможет выполниться.

Saif Bechan Saif Bechan
6 нояб. 2011 г. 17:47:09
Все ответы на вопрос 5
4
35

Самый простой способ сделать это — это комбинация функций wp_enqueue_script и действий в футере, о которых уже упоминали Saif и v0idless. Я часто использую jQuery в своих темах и плагинах, но при этом помещаю все остальные скрипты в футер.

Лучший способ добавить скрипты в очередь выглядит так:

function myscript() {
?>
<script type="text/javascript">
  if ( undefined !== window.jQuery ) {
    // скрипт, зависящий от jQuery
  }
</script>
<?php
}
add_action( 'wp_footer', 'myscript' );

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

Но этот фрагмент кода предполагает, что именно вы добавляете скрипт в очередь, то есть делаете это в своём собственном плагине или теме.

На данный момент нет способа добавить встроенный скрипт в футер WordPress и одновременно загрузить его с зависимостями. Но есть альтернатива, если вы готовы её рассмотреть.

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

Когда WordPress работает со скриптами, он загружает их во внутренний объект для отслеживания. В этом объекте есть три основных списка:

  • зарегистрированные (registered)
  • в очереди (queue)
  • выполненные (done)
  • ожидающие выполнения (to_do)

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

Таким образом, вместо того чтобы добавлять ваш футерный скрипт в очередь с зависимостью от jQuery, вы можете задокументировать, что он должен использовать jQuery, и просто программно проверить, загружен ли jQuery.

Для этого используется функция wp_script_is(), чтобы проверить, в каком списке находится скрипт.

function myscript() {
    if( wp_script_is( 'jquery', 'done' ) ) {
    ?>
    <script type="text/javascript">
      // скрипт, зависящий от jQuery
    </script>
    <?php
    }
}
add_action( 'wp_footer', 'myscript' );

Вы можете попробовать использовать этот же код для принудительной загрузки jQuery в футере, но я это не тестировал... так что результат может отличаться.

6 нояб. 2011 г. 19:22:45
Комментарии

соответствует ли предоставленный вами фрагмент кода стандартам разработки плагинов WordPress? Если да, то я буду использовать его в своем плагине... пожалуйста, дайте ответ по этому поводу...

laraib laraib
19 окт. 2016 г. 17:08:49

Последний фрагмент? Нет. Плагины WordPress всегда должны подключать скрипты через систему очередей. Принудительная загрузка jQuery вне этой системы — это то, что вы можете делать только на своем собственном сайте, где полностью контролируете окружение. Для плагина это никогда не будет правильным решением.

EAMann EAMann
20 окт. 2016 г. 07:51:20

тогда не могли бы вы привести рабочий пример, пожалуйста... ????

laraib laraib
20 окт. 2016 г. 08:41:16

Поскольку я разрабатываю свой первый в жизни плагин для WordPress и очень хочу, чтобы он был принят командой WordPress... жду любого вашего ответа, пожалуйста... выскажите свое мнение по этому поводу, чтобы я мог создать и сделать свой плагин принятым...

laraib laraib
20 окт. 2016 г. 08:42:11
0
15

Начиная с WordPress 4.5 вы можете добавлять встроенные скрипты с помощью wp_add_inline_script(). Чтобы добавить фрагмент JavaScript в подвал (footer), который требует 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

25 июн. 2016 г. 09:44:41
1

Используйте действие wp_footer следующим образом:

add_action( 'wp_footer', 'wpse33008');
function wpse33008() {
?>
<script type="text/javascript">
    /** ВСТАВЬТЕ СКРИПТ ЗДЕСЬ **/
</script>
<?php
}
6 нояб. 2011 г. 16:17:10
Комментарии

Это не лучший ответ. Я спрашивал, как я могу указать, что скрипт требует jQuery. Если у пользователя не запущен jQuery, ваша реализация не сработает.

Saif Bechan Saif Bechan
6 нояб. 2011 г. 16:18:34
0

Я понимаю, что OP хочет указать требование на jQuery, и авторы WordPress должны были разрешить вставку сниппетов рядом с файлами скриптов, но они этого не сделали, поэтому я не рекомендую пытаться форсировать это. Если вы, как и я, не хотите возиться с очередью или её порядком (потому что использую другие плагины, которые объединяют и оптимизируют скрипты), то решение действительно заключается в использовании хука wp_footer следующим образом:

<?php

add_action(
    'wp_footer'
    , function() {
        ?>
        <script>
            if (window.jQuery) {
                // ваш сниппет
            }
        </script>
        <?php
    }
    , 21 # после подключенных скриптов в футере
);
25 июл. 2018 г. 12:56:07
2
-1

Вы можете использовать действие wp_footer для этого. Ознакомьтесь с кодексом для wp_footer.

6 нояб. 2011 г. 15:30:47
Комментарии

Я понимаю, но как можно указать, что добавляемый в футер скрипт зависит от jQuery. Посмотрите мою правку, чтобы быть более конкретным.

Saif Bechan Saif Bechan
6 нояб. 2011 г. 16:14:28

Вы вообще утруждаетесь читать документацию, прежде чем минусовать ответы людей? Вы когда-нибудь читали про аргумент in_footer в wp_enqueue_script? Вот почитайте: http://codex.wordpress.org/Function_Reference/wp_enqueue_script. Там объясняется, как использовать его с действием wp_footer.

Rutwick Gangurde Rutwick Gangurde
6 нояб. 2011 г. 17:42:21