不能将自定义JS包含到Wordpress中

时间:2013-02-28 11:16:57

标签: javascript wordpress import

我的Wordpress页面加载(使用jQuery的load())其他页面,我希望主页面已经拥有所有需要的.js文件,其中一些是手工制作的。

当我尝试通常使用平常添加它们时:

<script src="http://10.0.0.158:8082/js/myScript.js"></script>

有时它有效,有时不行。 70%的时间不起作用,我只需要几个F5就可以暂时使其正常工作。

我的页面加载了很多其他页面(总是使用jQuery的load())但是如果在普通的php页面中导入它会正常工作。

Wordpress就搞砸了。

所以我google了很多,似乎我不能只通过html标签导入脚本,我需要使用wordpress的php函数wp_enqueue_script,文档在这里:http://codex.wordpress.org/Function_Reference/wp_enqueue_script

使用该文档和本指南中的信息: http://www.ericmmartin.com/5-tips-for-using-jquery-with-wordpress/

我做了这个功能:

<?php
        function customScriptInit() {
    if (!is_admin()) {
        echo"look! i'm working!";

        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://10.0.0.158:8082/js/JQuery.min.js', false, '1.8.3', true);
        wp_enqueue_script('jquery');

        wp_enqueue_script('jqueryUi', 'http://10.0.0.158:8082/js/jquery-ui-1.9.2.min.js', array('jquery'), '1.0', true);
        wp_enqueue_script('cookie', 'http://10.0.0.158:8082/js/cookie.js', array('jquery'), '1.0', true);
        wp_enqueue_script('json2', 'http://10.0.0.158:8082/js/json2.js', array('jquery'), '1.0', true);
        wp_enqueue_script('easing', 'http://10.0.0.158:8082/js/easing.min.js', array('jquery'), '1.0', true);
    }
    }
add_action('wp_enqueue_scripts', 'customScriptInit');
?>

我放置了一个echo命令以确保其正常运行(是的,我现在可以在我的页面中看到该消息)。

但是现在..看起来根本没有加载js,我从javascript控制台得到了这个错误:

Uncaught ReferenceError: jQuery is not defined 

如果我删除关于jQuery deregister的3行并再次注册我有jQuery工作,但不是我导入的脚本,通常与cookie的js错误:

Can't read cookie: TypeError: Object function (e,t){return new v.fn.init(e,t,n)} has no method 'cookie'

如何将这些js文件正确导入我的页面?

我知道使用Wordpress,使用“jQuery”而不是“$”是好的,我只是将它们全部转换成了这个结果,使用“$”结束了一团糟!

编辑:用此代码解决

<?php
function customScriptInit() {
    if (!is_admin()) {

        wp_register_script( 'my-jqueryUi', ABSPATH . '/js/jquery-ui-1.9.2.min.js');
        wp_register_script( 'my-cookie', ABSPATH . '/js/cookie.js');
        wp_register_script( 'my-json2', ABSPATH . '/js/json2.js');
        wp_register_script( 'my-easing', ABSPATH . '/js/easing.min.js');

        wp_enqueue_script( 'my-jqueryUi');
        wp_enqueue_script( 'my-cookie');
        wp_enqueue_script( 'my-json2');
        wp_enqueue_script( 'my-easing');
        }
    }
add_action('wp_enqueue_scripts', 'customScriptInit');
?>

感谢adeneo的良好实践细分!

2 个答案:

答案 0 :(得分:2)

你不应该加载你自己的jQuery版本,因为你最有可能在你的网站上有几个版本的jQuery。只需将jQuery和jQueryUI设置为在其他脚本中重新编写,wordpress将自动加载jQuery:

function customScriptInit() {
    if (!is_admin()) {
       $depends_on = array('jquery', 'jquery-ui-core', 'jquery-ui-sortable');

        wp_enqueue_script('cookie', ABSPATH . '/js/cookie.js', $depends_on);
        wp_enqueue_script('json2',  ABSPATH . '/js/json2.js', $depends_on);
        wp_enqueue_script('easing', ABSPATH . '/js/easing.min.js', $depends_on);
    }
}

add_action('wp_enqueue_scripts', 'customScriptInit');

使用其中一个WP变量作为URL,不要对它们进行硬编码。对于你通常会做的插件:

plugins_url('/js/cookie.js', __FILE__)

获取正确的网址等。

另请注意,在wordpress中你需要单独加载jQuery UI的每个部分,具体取决于你需要的内容,所有内容都在Codex中解释!

在Wordpress中,你不需要用jQuery更改所有的元符号,只需将它包装在一个无冲突的包装器中,如下所示:

jQuery(document).ready(function($) {
    // $() will work just fine as an alias for jQuery() inside of this function
});

在其中,你会像往常一样使用$,让事情变得更容易。

答案 1 :(得分:0)

之前解决了注册js文件的问题
<?php
function customScriptInit() {
    if (!is_admin()) {

        wp_register_script( 'my-jqueryUi', ABSPATH . '/js/jquery-ui-1.9.2.min.js');
        wp_register_script( 'my-cookie', ABSPATH . '/js/cookie.js');
        wp_register_script( 'my-json2', ABSPATH . '/js/json2.js');
        wp_register_script( 'my-easing', ABSPATH . '/js/easing.min.js');

        wp_enqueue_script( 'my-jqueryUi');
        wp_enqueue_script( 'my-cookie');
        wp_enqueue_script( 'my-json2');
        wp_enqueue_script( 'my-easing');
        }
    }
add_action('wp_enqueue_scripts', 'customScriptInit');
?>