Как добавить фрагмент 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. Я понизил ответ прямо взятый из кодекса. Я прочитал кодекс и не нашел ответа, поэтому задаю вопрос. Если вы перенаправите меня на кодекс снова, я понизлю.
Саиф Бехан
Спасибо Wyck, я думаю, что это так, спасибо за правильное понимание вопроса. Я думаю, что я просто буду использовать внешний 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 для загрузки в сноске , а также, но я не проверял , что ... поэтому пробег моей отличаться.

EAMann
источник
Ваш предоставленный фрагмент кода принят стандартами разработки плагинов WordPress? Если да, то я буду использовать его в своем плагине ... пожалуйста, дайте мне ответ на это ...
laraib
Последний фрагмент? Нет. Плагины WordPress всегда должны ставить в соответствие требованиям скрипта. Принудительная загрузка jQuery за пределы системы очередей - это только то, что вы должны делать на своем собственном сайте, где вы контролируете 100% среды. Это никогда не подходит для плагина.
EAMann
тогда можете ли вы дать мне несколько рабочих примеров для этого, пожалуйста ... ????
Лараиб
Поскольку я разрабатываю свой первый в мире плагин для WordPress, и мне бы очень хотелось, чтобы он был принят командой WordPress ... в ожидании любого вашего ответа, пожалуйста ... выскажите свое мнение об этом, чтобы я мог создать и принять мой плагин ...
Лараиб
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
}
v0idless
источник
1
Это не хороший ответ. Я спросил, как я могу указать требуемый скрипт jQuery. Если у пользователя нет запущенного jquery, ваша реализация не запустится.
Саиф Бехан
0

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

<?php

add_action(
    'wp_footer'
    , function() {
        ?>
        <script>
            if (window.jQuery) {
                // your snippet
            }
        </script>
        <?php
    }
    , 21 # after enqueued footer scripts
);
WALF
источник
-2

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

Рутвик Гангурде
источник
Я знаю, но как вы можете указать, что скрипт, который вы добавляете в нижний колонтитул, зависит от jquery. Проверьте мое редактирование, чтобы быть более точным.
Саиф Бечан
Вы даже не удосужились прочитать кодекс, прежде чем голосовать за ответы людей? Вы когда-нибудь читали об in_footerаргументе wp_enqueue_script? Прочитайте это: codex.wordpress.org/Function_Reference/wp_enqueue_script . Он говорит вам, как использовать его с wp_footerдействием.
Рутвик Гангурде