主题未正确调用jQuery

时间:2013-04-17 作者:user1632018

我正在开发一个主题,我调用了jquery以及主题队列中的其他JS文件。php文件。出于某种原因,只有托管在googles服务器上的Jquery文件才将主题URL添加到URL路径中,因此它不会加载主题URL,并导致其他JS文件无法正确加载。

钩子做得很好,它只指向他们的服务器,不包括get\\u bloginfo或get\\u template\\u uri。

将我的主题URL添加到的文件是:

    \'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js\', \'\', \'1.4.2\', true);
这是我的排队文件中的完整函数。有人能看到任何问题吗?

function init_scripts() {
wp_deregister_script( \'jquery\' );
wp_deregister_script( \'comment-reply\' );
// Register Scripts
wp_register_script( \'jquery\', \'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js\');
wp_register_script( \'comment-reply\', get_bloginfo(\'url\') . \'/wp-includes/js/comment-reply.js?ver=20090102\');
// Queue Scripts
wp_enqueue_script(\'modernizr\', get_bloginfo(\'template_url\') . \'/js/modernizr-1.5.min.js\', \'\', 1.5, false);
wp_enqueue_script(\'jquery\', \'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js\', \'\', \'1.4.2\', true);

if ( get_option( \'thread_comments\' ) ) wp_enqueue_script( \'comment-reply\',  get_bloginfo(\'url\') . \'/wp-includes/js/comment-reply.js?ver=20090102\', \'jquery\', \'\', true );
}

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

如果将脚本注册到wp_register_script() 没有必要将所有选项都传入wp_enqueue_script() 再一次

您可以在中心位置注册脚本,并在不同的文件中使用排队。

functions.php
wp_register_script( \'theme_script\', \'path/to/script.js\', array( [dependencies] ), \'1.0\', true );

[...]

if ( $condition )
  require_once \'file1.php\';
else
  require_once \'file2.php\';

file1.php
wp_enqueue_script( \'theme_script\' );

file2.php
wp_enqueue_script( \'theme_script\' );
将源添加到wp_enqueue_script() 提前注册会带来一些麻烦。让我们看看核心文件(wp-includes/functions.wp-scripts.php )

if ( $src ) {
  $_handle = explode(\'?\', $handle);
  $wp_scripts->add( $_handle[0], $src, $deps, $ver );
这对你的主题意味着什么?

首先,使用句柄“jquery”和源“http://ajax.googleapis.com/ajax...”。然后使用句柄“jquery”和源“http://ajax.googleapis.com/ajax...”。

查看核心代码:if ( $src ) 表示如果有传递的源wp_enqueue_script(), 应用源的第一部分(在?)将脚本注册到this 句柄和此源。

因此,您注册了一个带有句柄“jquery”和源“http://ajax.googleapis.com/ajax...“带wp_register_script(). 您使用句柄“http://ajax.googleapis.com/ajax...“和源”http://ajax.googleapis.com/ajax...”。稍后,您尝试将依赖于“jquery”的脚本(注释回复)排入队列,但jquery脚本仅已注册,未排入队列。

这会导致意外行为。

依赖项应作为数组传递(array( \'jquery\' )) (参见法典herehere). 在开发过程中,打开WP\\u DEBUG并检查文件是否存在。实际上,没有必要取消注册核心脚本并重新注册同一文件。如果需要未统一的版本(例如用于调试),请使用SCRIPT_DEBUG constant.

您的脚本应如下所示:

function init_scripts() {
wp_deregister_script( \'jquery\' );

// Register Scripts
if ( ! defined( \'SCRIPT_DEBUG\' ) && ( defined( \'WP_DEBUG\' ) && true == WP_DEBUG ) )
 define( \'SCRIPT_DEBUG\', true );

$modernizr_file = get_bloginfo(\'template_url\') . \'/js/modernizr-1.5.min.js\';
if ( defined( \'WP_DEBUG\' ) && true == WP_DEBUG && ! file_exists( $modernizr_file ) )
  throw new Exception( \'File not found for JS modernizr:\' . $modernizr_file );

wp_register_script( \'modernizr\', $modernizr_file, \'\', 1.5, false );
wp_register_script( \'jquery\', \'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js\', \'\', \'1.4.2\', true );

// Enqueue scripts, dependencies first
wp_enqueue_script( \'jquery\' );
wp_enqueue_script( \'modernizr\' );

if ( get_option( \'thread_comments\' ) )
  wp_enqueue_script( \'comment-reply\' );

}

SO网友:ferne97

jQuery依赖项应该包装在一个数组中。

wp_enqueue_script( \'comment-reply\',  get_bloginfo(\'url\') . \'/wp-includes/js/comment-reply.js?ver=20090102\', \'jquery\', \'\', true );
应该是

wp_enqueue_script( \'comment-reply\', get_bloginfo(\'url\') . \'/wp-includes/js/comment-reply.js\', array( \'jquery\' ), \'20090102\', true );
如果仍然不起作用,请尝试添加wp_enqueue_script( \'jquery\' ); 在手之前。

结束

相关推荐

如果第一次运行wp-cron.php花费的时间太长,运行两次是否安全?

假设我在WP配置中禁用了“DISABLE\\u WP\\u CRON”。php可以运行wp cron吗。php两次重叠?我有时注意到wp cron。php需要几分钟。我会花整整一个小时,但我的博主整天都在做很多安排,她很忙。比如说我每10分钟用一个真正的crontab运行一次*/10***等。它需要整整15分钟的时间来做生意。15分钟只是一个随机的例子。这花了多长时间,似乎没有任何押韵或理由。可以创建两个wp cron“实例”。php一起安全运行?最旧的实例是否已死亡,而新实例是否已接管?从运行wp-cr