当我向它添加jQueryUI时,Wordpress会中断

时间:2013-03-14 20:51:31

标签: php wordpress

我有一个WordPress网站(3.5.1),我想在我的插件中添加一个datepicker。默认情况下,这没有用,所以我四处搜索,发现我必须使用wp_register_script()wp_enqueue_script()加载库。添加脚本后,我有一个datepicker。完美。

我想更改小部件布局,发现它已被破坏。我可以拖动小部件但是当它们被丢弃时它们会冻结#39;我试图关闭我添加的jQuery库。小部件模块再次正常工作,但我的日期选择器不再起作用了。

所以,我在functions.php中有这段代码:

add_action('init', 'change_jquery');

function change_jquery() {

    wp_deregister_script('jquery');
    wp_deregister_script('jquery-ui-core');

    wp_register_script('jquery',        '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js', false, '1.9.0');
    wp_register_script('jquery-ui-core',    '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js', false, '1.10.0');
    wp_register_style('jquery-ui-css',  '//ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/ui-lightness/jquery-ui.css');

    wp_enqueue_script('jquery');
    wp_enqueue_script('jquery-ui-core');
    wp_enqueue_style('jquery-ui-css');
}

有谁知道是什么原因导致了我的问题?也许我已宣布双库?我对此很陌生,并且不知道在哪里搜索问题。

3 个答案:

答案 0 :(得分:0)

您应该使用wp_enqueue_scripts挂钩进行操作

add_action('wp_enqueue_scripts', 'change_jquery');

这可能无法解决您的问题,但它仍然是用于排队脚本的正确钩子。

答案 1 :(得分:0)

如果datepicker用于插件的前端而不是后端,请使用is_admin()条件标记仅在前端加载它(不是管理面板):

function change_jquery() {
    if (!is_admin()) {
        wp_deregister_script('jquery');
        wp_deregister_script('jquery-ui-core');

        wp_register_script('jquery',        '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js', false, '1.9.0');
        wp_register_script('jquery-ui-core',    '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js', false, '1.10.0');
        wp_register_style('jquery-ui-css',  '//ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/ui-lightness/jquery-ui.css');

        wp_enqueue_script('jquery');
        wp_enqueue_script('jquery-ui-core');
        wp_enqueue_style('jquery-ui-css');
    }
}
add_action('wp_enqueue_scripts', 'change_jquery');

答案 2 :(得分:0)

据我所知,这可能是一个javascript错误。 Wordpress在处理jquery的$变量时非常糟糕。你可以做两件事:

1)尝试添加用'jQuery'替换所有'$'的文件。请注意,“Q”必须以大写字母书写,“j”不是大写字母。这对我有用。例如:

//Original javascript in wordpress.
function some_function(){
    $('#some_id').click('some_function');
}

//Adapted javascript in wordpress.
function function(){
    jQuery('#some_id').click('some_function');
}

2)你可以尝试在jquery中创建一个无冲突的包装器。我还没有测试过这个,但它应该可行。您可以找到更多信息here