jQuery конфликт в плагине WordPress - jQuery против WordPress Core - PullRequest
0 голосов
/ 11 января 2011

У меня есть пользовательский плагин WordPress, использующий jQuery 1.4, и по какой-то причине он конфликтует с ядром js-кода WordPress ... не уверен, но я думаю, что это также jQuery, нет?

В любом случае, я предположил, что это был сценарий datepicker, который я использовал, который называется "anytime.js", однако после отладки выясняется, что конфликт все еще происходил после удаления ссылки в плагине на "anytime.js", но в конце концов был решен когда я избавился от ссылки на jquery.1.4.min.js ...

Итак, есть идеи, как избежать конфликта? WordPress основан на jQuery и это является причиной или это что-то еще?

Вот соответствующий код, найденный в плагине:

function datepicker_header(){
    $theme_dir = get_bloginfo('wpurl').'/wp-content/plugins/postevents/js/';?>

    <link rel="stylesheet" type="text/css" href="<?=$theme_dir?>anytime.css" />
    <link rel="stylesheet" type="text/css" href="<?=$theme_dir?>ui.css" />

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type='text/javascript'></script>
    <script src="<?=$theme_dir?>anytime.js" type='text/javascript'></script>

    <script type="text/javascript">
        $(function(){
            AnyTime.picker( "startdate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>' } );
            AnyTime.picker( "enddate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>'  } );
        });
    </script>

EDIT

Я думаю, что, возможно, вызвал некоторую путаницу. Я должен объяснить функциональность. Существует плагин под названием «Post Events», который имеет средство выбора даты на основе jQuery. DatePicker полагается на JQuery для запуска. Особая и необычная проблема заключается в том, что когда плагин активен, он вызывает сбой новых перетаскиваемых меню WordPress 3.0 из панели администратора WP. Все остальные функции работают, однако отключение средства выбора даты не приводит к тому, что меню становятся перетаскиваемыми. Вместо этого только удаление ссылки на «/libs/jquery/1.4.2 ...» в приведенном выше коде приводит к тому, что меню снова становятся перетаскиваемыми.

РЕДАКТИРОВАТЬ # 2

Хотя я могу указать только один правильный ответ, для исправления проблемы потребовались как исправления @Matthew, так и @ polarblau , приведенные ниже,

Ответы [ 3 ]

1 голос
/ 11 января 2011

Смотрите эту ссылку для правильного добавления скриптов в Wordpress: http://weblogtoolscollection.com/archives/2010/05/06/adding-scripts-properly-to-wordpress-part-1-wp_enqueue_script/

И да, Wordpress использует JQuery для некоторых своих функций ...

1 голос
/ 11 января 2011

Этот код проверяет, загружен ли уже jQuery ... затем загружает его, если он еще не загружен (этот код загружается из кода Google - вы можете обновить URL-адрес до локального файла, если хотите).

if(typeof(jQuery)=='undefined'){
    var loadjQuery = document.createElement("script");
    loadjQuery.setAttribute("type","text/javascript");
    loadjQuery.setAttribute("src","http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js");
    document.getElementsByTagName("head")[0].appendChild(loadjQuery);
}

Однако я должен отметить, что это будет работать только в том случае, если загружено ПОСЛЕ другого потенциального экземпляра jQuery (нет гарантии, что экземпляр jQuery не будет загружен позже, если он не выполнит это такая же проверка).

Это полезно в ситуациях, когда jQuery загружен ИНОГДА, и вам нужно, чтобы он был ВСЕГДА загружен, несмотря ни на что. В этом случае поместите этот код в какой-то момент после загрузки оригинала, но перед тем, как использовать какую-либо функциональность jQuery.

Еще одна вещь: иногда WordPress суетится из-за кода $ in jQuery. Вы можете обойти это, просто напечатав ' jQuery ' (или выполнив поиск / замену) вместо $ везде, где необходим $.

1 голос
/ 11 января 2011

Попробуйте:

jQuery(function(){
    AnyTime.picker( "startdate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>' } );
    AnyTime.picker( "enddate", { format: "%m-%d-%Y", firstDOW: 1, baseYear: '<?=date('Y')?>', earliest: '<?=date('m-d-Y')?>'  } );
});

Как правило, рекомендуется обернуть ваши скрипты и плагины, использующие jQuery, в свои собственные области:

(function($){
    //... your plugin, etc. here
})(jQuery);
...