Есть ли способ использовать wp_enqueue_script для непосредственного добавления JavaScript? - PullRequest
0 голосов
/ 28 августа 2018

Есть ли способ добавить Javascript на страницу напрямую, но с помощью Wordpress ждать загрузки jQuery? Так же, как с использованием wp_enqueue_script?

В шаблоне пользовательской страницы у меня есть следующий код:

<?php if (isset($_GET['status']) && $_GET['status'] == 'newly_created') : ?>
    <script>
        $(function() {
            App.dialogs.afterPetitionCreate();
        });
    </script>
<?php endif; ?>

Wordpress лает, что $ не определено. Теперь я не хочу загружать весь файл .js только для вызова этой функции. Так что в этом смысле wp_enqueue_script не вариант. Я только хочу запустить JavaScript прямо на странице, но хочу дождаться загрузки jQuery.

Это то, что я тоже пробовал, добавляя JavaScript в нижний колонтитул с Wordpress:

<?php if (isset($_GET['status']) && $_GET['status'] == 'newly_created') :
    add_action('wp_footer', 'my_footer_scripts');
    function my_footer_scripts() { ?>
        <script>
            $(function () {
                App.dialogs.afterPetitionCreate();
            });
        </script>
    <?php } ?>
<?php endif; ?>

Но, к сожалению, такая же ошибка появляется $ is undefined. Итак, что будет правильным способом быстрой загрузки Javascript на пользовательский шаблон страницы Wordpress и ожидания загрузки jQuery?

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Вы пытались запустить сценарий в рамках события готовности документа, как показано в приведенном ниже коде?

<script>
jQuery(document).ready(function($){
   $(function () {
      App.dialogs.afterPetitionCreate();
   });
});
</script>

Событие .ready наступает, когда загружается объект документа или DOM, что делает его идеальным для размещения всех ваших событий jquery и других функций.

0 голосов
/ 30 августа 2018

Я не думаю, что это хорошая практика.

Лучше изменить логику на что-то вроде этого:

<?php if (isset($_GET['status']) && $_GET['status'] == 'newly_created') : ?>
    <input type='hidden' id='status' name='status' value='newly_created'>
<?php endif; ?>

script.js:

$(function() {
    if ( $('#status').val() === 'newly_created' ) {
        App.dialogs.afterPetitionCreate()
    }
});

и

wp_enqueue_script( 'afterPetitionCreate', '/path/to/script.js', array( 'jquery' ), '', true );

p.s. Вы можете обернуть wp_enqueue_script() в is_page_template( 'my-cool-page-teplate.php' ).

0 голосов
/ 28 августа 2018

Это код, который я закончил писать, и делает именно то, что я хочу. Как и в случае с «Отправить Паркаш», необходимо использовать jQuery вместо $.

/*
 * Adds a single bit of Javascript to the page.
 */
function theme_embed_script($script) {
    add_action('wp_footer', function ($script) {
        echo '<script type="text/javascript">' . $script . '</script>';
    }, 10);
    do_action('wp_footer', $script);
}

Использование:

<?php theme_embed_script('jQuery(function () { alert("Hello"); });'); ?>

ИЛИ используйте скрипт Wordpress 'wp_add_inline_script(), как упоминал Дэвид.

...