Странность в jQuery, поставляемая с WordPress

У меня проблема с jQuery, поставляемым с WordPress. Эта проблема имеет следующий HTML-код:

<!DOCTYPE html> <html> <head> <script src='http://wordpress.myownserver/wp-includes/js/jquery/jquery.js?ver=1.8.3'></script> </head> <body> <div id="something"></div> <script>if(window.jQuery) console.log("window.jQuery");</script> <script>window.jQuery || document.write('<script src="/res/jquery-1.8.3.min.js"><\/script>')</script> <script> $(document).ready(function () { $('#something').html('something'); }); </script> </body> 

Это типичная ситуация на моем сайте WordPress, где jQuery WordPress включен (для панели администратора) в <head> , а мой собственный CDN / резервный jQuery включен до конца </body> .

Консольный вывод этой страницы:

 window.jQuery Uncaught TypeError: Property '$' of object [object Object] is not a function 

Я могу решить эту проблему несколькими способами, например, я мог бы заменить часть jQuery <script> в <body> образом:

 <script src="/res/jquery-1.8.3.min.js"></script> 

Без проверки window.jQuery . Но это не оптимально, учитывая, что я включил jQuery дважды. Затем я попытался заменить <script> в <head> на:

 <script src="/res/jquery-1.8.3.min.js"></script> 

Удивительно, но это также решило проблему. Я знал о wp_deregister_script , но для администратора это также отключает jQuery в панели управления.

Я бы хотел сохранить админ-бар для администратора. Так что в настоящее время сайт только ломается (см. Вывод на консоль выше), когда администратор входит в систему. Мне интересно, является ли jQuery, поставляемое с WordPress, чем-то особенным. Я использую версию 3.5.1, и я планирую использовать jQuery в своей собственной теме. Должен ли я просто включить его дважды, чтобы решить эту проблему?

Solutions Collecting From Web of "Странность в jQuery, поставляемая с WordPress"

Существует различие с версией jQuery, поставляемой с WordPress, как схема на странице Codex для wp_enqueue_script :

Примечание. Библиотека jQuery, включенная в WordPress, загружается в режиме «без конфликтов». Это необходимо для предотвращения проблем совместимости с другими библиотеками javascript, которые может загружать WordPress.

Измените свой сценарий, чтобы ссылаться на объект jQuery с помощью jQuery а не $ , передавая объект jQuery как $ чтобы вы могли использовать его, как обычно, внутри:

 jQuery(document).ready(function($) { $('#something').html('something'); }); - jQuery(document).ready(function($) { $('#something').html('something'); }); - jQuery(document).ready(function($) { $('#something').html('something'); });