【问题标题】:Wordpress wp_enqueue_script() NEVER worksWordpress wp_enqueue_script() 从不工作
【发布时间】:2011-11-09 17:07:55
【问题描述】:

我已经阅读了关于 wp_enqueue 脚本的所有帖子和文档......但我从未成功地让它工作。

这就是我正在做的工作:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"</script>
<script type="text/javascript">
MY CODE
</script>

我知道我知道我知道这不是正确的做法。所以这是我尝试过的:

wp_enqueue_script('jquery');
wp_head();

运气不好。

add_action('init', 'addscripts');
function addscripts() {
    wp_enqueue_script('jquery');
 }
wp_head();

运气不好。

//in the theme's functions.php file
add_action('init', 'addscripts');
//add_action('wp_enqueue_scripts', 'addscripts'); //this also doens't work
function addscripts() {
    wp_enqueue_script('jquery');
 }

我也尝试了相同的方法,使用指向 google 的外部 jquery 库的链接而不是 jquery 标记。我也尝试过取消注册然后注册 jquery 脚本。从不工作。

所以我认为这些是关键问题:

  1. 我对@9​​87654328@ 函数的调用有问题吗?

  2. 它应该去哪里? functions.php? header.php?

  3. 是否有我需要使用但未提及的特定挂钩? 'init'? 'template_redirect'? 'wp_enqueue_scripts?'?

请不要从codex 复制/粘贴sn-ps!我已经阅读了 50 遍并尝试了所有内容。我保证。

我正在尝试全新安装 WP3 并将上述代码添加到默认的 211 主题中。

【问题讨论】:

  • 我不知道你想从我们这里得到什么。您在上次编辑中添加的所有三个问题都在Wordpress.org 找到答案。
  • 我是第一个告诉人们“RTFM”的人,但在这种情况下这不是问题。法典在这个主题上非常不清楚。文档很少,其他地方有大量相互矛盾的信息。话虽这么说...我想我解决了我的问题(请参阅下面的答案)。
  • 很高兴你明白了。您的解决方案包含对其他人最有帮助的信息。请将其作为答案发布在下面,然后接受您自己的答案。谢谢。
  • 我第二个@Sparky,很高兴你知道了。一点建议:WP 使用“noConflict Mode”是有原因的。与其禁用它,不如在你的 jQuery 函数前面加上jQuery( 而不是$(,然后它们就可以工作了。在这样定义的函数中,您可以照常使用$(
  • @Emerson 你在做什么来加载 javascript?我在理解法典方面也有问题,我很想看看一个例子。谢谢!

标签: jquery wordpress include wordpress-theming


【解决方案1】:

我们必须假设 wp_enqueue 有效,因为我没有看到地平线上的干草叉和火把。

这样的事情会让很多开发者感到不安。

鉴于此,我们假设它从未被调用过。

尝试在被调用的函数中添加类似的内容来注销/注册新版本的 jQuery(不知道为什么要这样做 BTW)。

<?php error_log( 'Something called me!' , 0 ); ?>

然后在您运行您的网站并且您希望调用您的函数后,请检查您的服务器错误日志(/var/log/apache/yoursite-error.log 或其他内容)并查看该字符串是否显示。

如果它出现了,我们可以继续进行下一组故障排除。

【讨论】:

  • 疑难解答提示不应放在答案部分。请将此作为更完整的答案或将其移至 OP 的 cmets 部分。谢谢。
  • 哎呀!我认为 jquery 没有加载,因为我在控制台中看到错误“$ 未定义”。原来它正在加载,但处于 noConflict 模式。它确实在法典中提到了这一点,但在一堆脚本的例子下面。有点令人沮丧。但是哦,好吧。感谢您的帮助!
  • 为了将来参考,有没有办法在 Firebug 或 Chrome 的开发者面板中查看错误日志?我经常通过回显字符串来做我自己的版本,但它有点笨重。
  • 你可以在预期的函数上输出一些javascript并执行console.log('test');
  • 是的。这正是我的想法。我只是好奇是否存在不需要打印标记或通过日志文件挖掘的 PHP 等效项。也许那是不可行的。
【解决方案2】:

http://codex.wordpress.org/Function_Reference/wp_enqueue_script

假设您想使用 jQuery 的 CDN 副本而不是 WordPress 的, 将此代码添加到您的 functions.php 文件中。

<?php
function my_scripts_method() {
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js');
    wp_enqueue_script( 'jquery' );
}    

add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

【讨论】:

  • 来自官方的 Wordpress 文档。如果不查看您的实际博客以确定可能存在的干扰,几乎不可能提供进一步的帮助。
  • 我正在本地开发一个主题。它还没有上线。但是我从一个干净的 WP3 安装开始,我只是将代码添加到默认的 211 主题中。所以真的没什么可展示的。对吗?
  • @Emerson,但也没有任何人可以提供帮助,对吧?
  • 我已经提出并回答了许多与尚未上线的项目有关的问题。我不明白为什么这不是一个合适的问题。
  • @Emerson Sparky 的代码 sn-p 不仅来自 wordpress 法典,而且确实有效。我在几个生产站点上成功地使用了这种精确的方法。我看到它无法正常工作的两个可能原因:1. 您的本地环境未正确连接到网络。 2. 版本编号(在上面和法典中)可能是错误的。检查google libraries - 版本 1.6(请参阅“旧版本”)在那里称为“1.6.0”,最新的是“1.6.4”。尝试将上述代码中的“1.6”替换为任一。
【解决方案3】:

我想添加评论,但认为开头的问题太老了,无法这样做。

我希望我在这里引用了所有合适的人并承认他们的意见。


我有一段时间和@Emerson 有同样的问题,直到我做了以下以及 jQuery 如何工作 /loading。

首先,我将我的 JS 代码从 $( 更改为 jQuery( 就像 @Johannes Pille 在开头的 cmets 中所建议的那样。@Johannes Pille 提到的有关 noConflict() 的信息可以在以下位置找到:http://codex.wordpress.org/Function_Reference/wp_enqueue_script#jQuery_noConflict_Wrappers

编解码器的链接仅供您使用@Emerson ..:P

所以我的代码如下所示 - 希望这对某人有所帮助。

JS 代码

/**
 * navigation.js
 *
 * Handles toggling the navigation menu for small screens.
 */

jQuery(document).ready(function(){
jQuery(".nav-toggle").click(function(){
    jQuery("#menu-header-menu").slideToggle("fast");
});
});

在我的functions.php文件中

function toggle_menu(){
if(!is_admin()){
    //register the script location
    wp_register_script('navigation', 
        get_stylesheet_directory_uri() . '/js/navigation.js', 
        array('jquery'), '2.0.110526' );
    // enqueue the script
    wp_enqueue_script('navigation');
};
}
add_action('init', 'toggle_menu'); 

我发现告诉 Wordpress 要使用的 jQuery 版本,“2.0.110526”是非常重要的。没有这个就不行了。

我不必添加任何 OP 的将 jQuery 添加到 header.php 或 functions.php 的示例。正如许多其他人所说,Wordpress 附带 jQuery。我发现在 functions.php 中注册脚本时,您只需要告诉 Wordpress 何时以及使用什么版本

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多