jQuery в Wordpress - Почему не работает?

25 июл. 2012 г., 00:21:04
Просмотры: 14.4K
Голосов: 2

Я использую этот шаблон в качестве основы: www.html5reset.org/

Он довольно хорош, но, кажется, у меня проблемы с jQuery.

В файле functions.php написано:

// Подключаем jQuery
    if ( !function_exists(core_mods) ) {
        function core_mods() {
            if ( !is_admin() ) {
                wp_deregister_script('jquery');
                wp_register_script('jquery', ("//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"), false);
                wp_enqueue_script('jquery');
            }
        }
        core_mods();
    }

Мне кажется, всё в порядке - или нет?

Также есть готовый JS-файл. В нём написано:

// переназначаем jQuery на $
(function($){})(window.jQuery);

Я не совсем понимаю, что это делает, но выглядит нормально.

Чтобы проверить работу jQuery, я попробовал следующее - ничего не работает, jQuery не определена.

$(document).ready(function() {
    alert("This is a test.");
});

jQuery(document).ready(function() {
    alert("This is a test.");
});

$(document).ready(function($) {
    alert("This is a test.");
});

Можете подсказать, что может быть не так? Спасибо!

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

(function($){})(window.jQuery); — это обёрнутый метод (чтобы избежать загрязнения глобального пространства имён), поэтому я не понимаю, как $ может быть доступен за пределами этой функции.

Joseph Leedy Joseph Leedy
25 июл. 2012 г. 05:39:14
Все ответы на вопрос 2
0

просто чтобы помочь немного дальше... WordPress запускает jQuery в 'безопасном' режиме

что означает, что в WordPress вам нужно писать код так
jQuery(document).ready(function() {

а не так

$(document).ready(function() {

Но что сделал HTML5BP - добавил этот интересный кусок кода (вероятно, любезно, чтобы помочь разработчикам)

// переназначение jQuery на $<br/> (function($){})(window.jQuery);

К вашему сведению, есть 3-й метод переключения обратно на символ $ для jQuery, который заключается в том, чтобы начать ваш код так:

jQuery(document).ready(function($) {

с этого момента в вашем коде вы можете использовать $ для обращения к jQuery

25 июл. 2012 г. 00:36:13
3

В wp_register_script() есть опечатка - в URL отсутствует "http:". Исправьте это, и тогда хотя бы jQuery будет загружаться.

Кстати, многие считают не самой лучшей практикой перезаписывать jQuery по умолчанию в WordPress. Я даже удалил этот код из своей кастомной темы HTML5reset, которую использую.

25 июл. 2012 г. 00:25:05
Комментарии

Это URL относительно протокола, но, похоже, WordPress не может их обрабатывать.

Milo Milo
25 июл. 2012 г. 00:56:10

Хорошо, спасибо! Я тоже убрал его, и теперь всё работает. У вас есть какие-то материалы, почему это считается плохой практикой?

Sven Sven
25 июл. 2012 г. 01:41:11

Это требование "Theme review" для включения в репозиторий .org. Не изменяя jQuery, вы гарантируете, что WordPress и другие плагины могут безопасно предполагать, какую версию jQuery вы используете. Вы можете избежать этого, всегда следя за тем, чтобы все ваши темы были обновлены до использования стандартной версии jQuery для WP, но это довольно сложно поддерживать.

mrwweb mrwweb
25 июл. 2012 г. 19:33:02