未定义的jQuery和底部的样式表随js文件一起加载

时间:2013-07-08 作者:roymckrank

我正在为wordpress开发一个主题,并使用此功能将脚本和样式排队

function Joy_scripts() {

wp_enqueue_style( \'Joy-style\');

wp_enqueue_script( \'Joy-scripts\', get_template_directory_uri() . \'/js/scripts.js\', array( \'jquery\' ), \'1.0\', true );

if ( is_singular() && wp_attachment_is_image() ) {
wp_enqueue_script( \'Joy-keyboard-image-navigation\', get_template_directory_uri() . \'/js/keyboard-image-navigation.js\', array( \'jquery\' ), \'20120202\' );
}

if ( in_category(\'12\') ) {
wp_enqueue_script( \'Joy-jquizzy-engine\', get_template_directory_uri(). \'/js/jquery.jquizzy.js\', array( \'jquery\'), \'1.7\' );
wp_enqueue_script( \'Joy-jquizzy-init\', get_template_directory_uri(). \'/js/init.js\', array( \'jquery\'), \'1.7\' );
wp_enqueue_script( \'Joy-jquizzy-script\', get_template_directory_uri(). \'/js/jquizzy-script.js\', array( \'jquery\'), \'1.7\' );
 }
}
add_action( \'wp_enqueue_scripts\', \'Joy_scripts\');
这是html输出:

</footer>
</div><!-- #page -->

<script type=\'text/javascript\' src=\'http://localhost:8888/theme/wp-includes/js/jquery/jquery.js?ver=1.8.3\'></script>
<script type=\'text/javascript\' src=\'http://localhost:8888/theme/wp-content/plugins/mailchimp-widget/js/mailchimp-widget-min.js?ver=3.5.2\'></script>
<script type=\'text/javascript\' src=\'http://localhost:8888/theme/wp-content/plugins/media-element-html5-video-and-audio-player/mediaelement/mediaelement-and-player.min.js?ver=2.1.3\'>    </script>

<!-- some other scripts loaded here they\'re not important for this question purposes-->

<link rel=\'stylesheet\' id=\'Joy-style-css\'  href=\'http://localhost:8888/theme/wp-content/themes/Joy/style.css?ver=1.0\' type=\'text/css\' media=\'all\' />
正如您所看到的,主题样式表加载在脚本之后,并且位于文档的底部。这导致了FOUC(我在顶部添加了样式表,使用<link rel="stylesheet" href="<?php bloginfo(\'stylesheet_url\'); ?>" type="text/css" media="all" /> 而FOUC出现了)

在Chrome控制台中,我还可以看到:Uncaught ReferenceError: jQuery is not defined localhost/:111 Uncaught TypeError: Property \'$\' of object [object Object] is not a function

jQuery在其他脚本之前正确加载,因此,我真的不明白这里发生了什么,我做错了什么吗?

我的主题基于下划线

谢谢你的帮助。

3 个回复
最合适的回答,由SO网友:thomascharbit 整理而成

对于jQuery,Wordpress使用jQuery。noConflict(),因此“$”不是对jQuery的引用。-您可以使用jQuery()代替$()-或定义$,例如,您可以这样包装代码:

 jQuery(function($) {
    // your jQ code
 });
对于文档底部的CSS:是否在标题中调用wp\\u head()。php?

SO网友:Spanka

正如thomascharbit所说:使用jQuery(),而不是$,因为没有冲突我最近一直在努力解决这个问题,并在这里记录了我的绊脚石:http://learningwordpress.com.au/steps/step-04-script-handling/

下面我总结的代码一下子就完成了这一切-将我的自定义JS排队,指定ui小部件(&M);ui对话框部分,使其依赖于jQuery核心,并直接从google加载css。

function load_jquery_ui() {
    global $wp_scripts; 
    // tell WordPress to load jQuery widgets & dialogs
    wp_enqueue_script(
        \'dynamics\',
        get_template_directory_uri() . \'/scripts/dynamics.js\',
        array( \'jquery-ui-widget\', \'jquery-ui-dialog\' )
    ); 
    // get registered script object for jquery-ui
    $ui = $wp_scripts->query(\'jquery-ui-core\'); 
    // tell WordPress to load the Smoothness theme from Google CDN
    #$protocol = is_ssl() ? \'https\' : \'http\';
    #$url = "$protocol://ajax.googleapis.com/ajax/libs/jqueryui/{$ui->ver}/themes/smoothness/jquery-ui.css";
    $url = "//ajax.googleapis.com/ajax/libs/jqueryui/{$ui->ver}/themes/smoothness/jquery-ui.css";
    wp_enqueue_style(\'jquery-ui-smoothness\', $url, false, null);
}
add_action(\'init\', \'load_jquery_ui\');

SO网友:Vigs

最好把事情分解成可管理的步骤。

打造你的风格

add_action( \'wp_enqueue_scripts\', \'Joy_styles\' );
function Joy_style(){
wp_enqueue_style( \'Joy-style\');
}
确保包含jquery。

if (!is_admin()) add_action(\'wp_enqueue_scripts\', \'kv_jquery_enqueue\', 11);
function kv_jquery_enqueue() {
   wp_deregister_script(\'jquery\');
   wp_register_script(\'jquery\', "http" . ($_SERVER[\'SERVER_PORT\'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", false, null);
   wp_enqueue_script(\'jquery\');
}
Enque您的脚本

function Joy_scripts() {
wp_enqueue_script( \'Joy-scripts\', get_template_directory_uri() . \'/js/scripts.js\', array( \'jquery\' ), \'1.0\', true );

if ( is_singular() && wp_attachment_is_image() ) {
wp_enqueue_script( \'Joy-keyboard-image-navigation\', get_template_directory_uri() . \'/js/keyboard-image-navigation.js\', array( \'jquery\' ), \'20120202\' );
}

if ( in_category(\'12\') ) {
wp_enqueue_script( \'Joy-jquizzy-engine\', get_template_directory_uri(). \'/js/jquery.jquizzy.js\', array( \'jquery\'), \'1.7\' );
wp_enqueue_script( \'Joy-jquizzy-init\', get_template_directory_uri(). \'/js/init.js\', array( \'jquery\'), \'1.7\' );
wp_enqueue_script( \'Joy-jquizzy-script\', get_template_directory_uri(). \'/js/jquizzy-script.js\', array( \'jquery\'), \'1.7\' );
 }
}
add_action( \'wp_enqueue_scripts\', \'Joy_scripts\');

结束

相关推荐

有条件地检查主题中是否包含bootstrap.css

我正在为Bootstrap框架创建一个短代码插件,该插件将与我的主题一起使用。然而,如果用户的主题已经有引导,那么这将被发布到插件中。包括css,有没有办法让我从插件中检查这一点?