如何在Wordpress上正确包含jquery-ui效果


25

我一直试图在我的wordpress主题中包括jquery ui效果(更具体地说是摇动效果)。到目前为止,我只能包含jQuery脚本,但是我真的不知道将ui脚本放置在何处以及如何使其入队。

这是我的代码。它显然不起作用:

    <?php wp_enqueue_script("jquery"); ?>
<?php wp_enqueue_script("jquery-ui-core"); ?>
<?php wp_head(); ?>
<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" />
<script type="text/javascript">
    var $j = jQuery.noConflict();
    $j(document).ready(function() {
        $j("#manita-imagen").mouseover(function(){
            //$j(this).animate({ opacity: "hide" })
            // alert('asd');
            $j(this).effect("shake", { times:3 }, 300);
        });
    });

 </script>

谢谢你的帮助!


5
需要注意的是:您不需要排队jquery,因为它已经被列为jquery-ui-core的依赖项。
goldenapples

Answers:


36

尽管WordPress确实包含jQuery UI库,但它不包含UI / Effects库。该库是独立的。您需要包括effects.core.js文件的副本,并将其单独排队。

请注意,在排队时,应将其命名为jquery-effects-core,以保持一致性。

您可以像这样包含它:

wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');

编辑:此答案是在WordPress 3.3之前编写的,而WordPress 3.3现在包括各种效果库作为核心的一部分。您只需将现在需要使用的效果库片段放入队列即可。

这些文件的段列表可以在wp-includes / script-loader.php中找到,但是核心的段是jquery-effects-core。

wp_enqueue_script("jquery-effects-core");

1
请注意,对于实际效果(盲,弹跳,淡入淡出等),您必须明确地使该效果入队。喜欢“淡入淡出”:wp_enqueue_script( 'jquery-effects-fade' );
SunnyRed

用户应将自己的Javascript放入单独的文件中,然后使该文件入队并列出其所需的依赖项。这样,WordPress(和性能插件)就会知道加载这些脚本所需的顺序,并将它们按正确的顺序放在页面上。
戴夫·希尔迪奇

8

@dabito,

您没有正确加载脚本...不要wp_enqueue_script()在主题模板文件中调用(看起来像header.php)。您需要从单独的挂钩调用此函数。

在主题functions.php文件中,放置以下代码:

function my_add_frontend_scripts() {
        wp_enqueue_script('jquery');
        wp_enqueue_script('jquery-ui-core');
}
add_action('wp_enqueue_scripts', 'my_add_frontend_scripts');

如果两个脚本都已正确注册,则应该可以正常加载它们(通过<script />在标头中添加适当的标签。然后其他JavaScript代码应该可以正常工作)。

如果要将脚本添加到事物的管理端,请添加操作admin_enqueue_scripts


1
不完全正确。只要他在wp_head()调用之前调用它们,就可以正常工作。它们不必被钩住,也无论如何都不应钩住它们。如果您要将它们挂在某处,请将它们挂在'wp_enqueue_scripts'操作钩上。那就是它的目的。
奥托

1
@Otto您所说的听起来合乎逻辑。但是,您是否有一个解释,为什么在法典中为什么写有@EAMann所写的内容-“使用init动作来调用此函数”?他的例子是从那里取来的... codex.wordpress.org/Function_Reference/wp_enqueue_script
Lea Cohen

食典在地方是随意的。为此,最好的操作是在前端使用“ wp_enqueue_scripts”,在后端使用“ admin_enqueue_scripts”。挂接init可以起作用,但是不必要地将脚本排入整个站点。
奥托

我已经相应更新了代码段。最初是基于食典参考的快速,直截了当的反应……使用wp_enqueue_scripts绝对是更好的方法,避免了额外的is_admin()检查。
EAMann 2011年

这也是错误的方式-性能插件需要了解依赖关系。作者应编写自己的.js文件,并使其入队并命名依赖项-WordPress将处理其余部分。
戴夫·希尔迪奇

7

您也可以直接从Google入队整个jQuery UI。这是我的方法:

wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');

而且由于jQuery被列为jQuery UI的依赖项,因此您无需手动将其加入队列。WordPress会自动为您完成。


3
您甚至可以从Google CDN而不是您自己的站点加载所有jQuery库
Jan Fabry

我极力劝阻不要从国外加载脚本。我做了很长时间,然后(很少)发生了主机关闭的情况,因此多个客户一次都遇到了页面问题。
朱利安·F·韦纳特

1
@ JulianF.Weinert这是一把双刃剑,具有良好的cdn意味着较低的延迟,但如果失败则无法控制。就是说,如果Google CDN掉线了一半,互联网将失败,因此您的将不是唯一的一个。虽然它关闭的可能性很小,并且不会缓存在用户浏览器中。在大多数情况下,使用CDN是有好处的。
Alex

真正。我说的不是完整的CDN,在这里,这当然是绝对可以的,因为它是专门为这种用法而设计的。我认为,从任何john-doe.com加载脚本都有些冒险
朱利安·F·

3

该jQuery库似乎没有默认加载(此处为完整列表),因此您可能需要在入队之前注册脚本。


1
我以为您可能是对的(有时WP注册脚本所使用的名称与所使用的标准名称不同),但在这种情况下,注册“ jquery-ui-core”应该有效。它列在core.trac.wordpress.org/browser/branches/3.0/wp-includes/…中
goldenapples

好点子!我以为他要加载是jQuery库,在这种情况下装载其余部分将是一个有点bloaty。
编辑者

3

只是一些技巧。当您将脚本排入队列时,它会排入整个站点,包括管理面板。如果您不希望该脚本出现在管理面板中,则只能在前端将它们包括在网站中。

function my_add_frontend_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('jquery-ui-core');
}

add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');

4
您不应该使用init钩子来排队。仅将wp_enqueue_scripts钩子用于前端,将admin_enqueue_scripts钩子用于后端。
奥托

不知道该wp_enqueue_scripts操作仅适用于前端。谢谢:)
Tareq

0

这里的所有答案虽然有效,但在技术上都是错误的。

包含jquery-ui和其他库的正确方法是将它们包含为您自己脚本的依赖项。

这很重要,因为性能工具可能会检查这些依赖性,以更改脚本的加载顺序以优化站点。

因此,如果要使用jquery和jquery-ui,请创建自己的.js脚本文件并按如下顺序对其进行排队,并列出相关性-无需为所使用的每个库使用单独的enqueue命令:

wp_enqueue_script('your-script-handle', 
 plugins_url('your-script-file.js', __FILE__), 
 array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);

您可以在此处找到所有要添加为依赖项的脚本的列表:https : //developer.wordpress.org/reference/functions/wp_enqueue_script/


1
你说对了。在您自己的wp_enqueue_script调用中使用依赖关系是包含jquery / jquery-ui / etc的正确方法。无需将它们分别排队。
米切·帕夫洛斯·迈克尔

而且,如果您在脚本依赖它们时分别排队,则脚本可能会/将在优化性能的站点上中断-例如,如果将脚本合并为一个脚本以加快加载速度,或者是否将它们推迟或最小化(取决于最小化,但顺序可以更改)。如果您没有告诉WordPress您的脚本依赖于其他脚本,则不能保证它们的加载顺序。
戴夫·希尔迪奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.