如何在functions.php中正确添加Javascript


10

我想删除一些在WooCommerce中购物车按钮上标准的难看的箭头。为此,我发现了添加以下代码的技巧,该代码应在文档加载后删除箭头。

我以为我要把它放在我的functions.php中?我到底要怎么做?

$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});

编辑

好的。我已经尝试过这种方法:

制作一个名为“ removeArrows.js”的文件,并将其放在我的插件文件夹中。它具有与原始代码相同的内容,但jQuery代替$。然后我将以下内容添加到functions.php中:

function wpb_adding_scripts() {
      wp_register_script('my_amazing_script', plugins_url('removeArrows.js', FILE), array('jquery'),'1.1', true);
     wp_enqueue_script('my_amazing_script');
 } 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); 

我不知道如何使代码正确显示。这没有用。有什么建议可以使这项工作吗?

jQuery代码段源


太疯狂了:您不能在生成箭头的代码中编辑箭头吗?(或者它是从外部来源下载的?)在任何情况下,您都可以在一个函数中同时执行两个替换操作,以避免两次在cart块中读取和写入所有HTML。我不知道一种直接从functions.php将其注入页面的方法,但是您可以将其保存在单独的脚本文件中(如果还没有,可以将其添加到其中),然后再添加wp-enqueue-script它。您还必须将$s 更改为jQuery(请参见该页面的第7节)
Rup

不,我很确定在插入之前无法将其删除。如果可以的话,我还没有找到一种方法。将其添加到单个函数中的好处。会是这样吗?$(document).ready(function(){$(“。woocommerce-cart”)。html(function(i,val){return val.replace(“→”,“”); return val.replace(“← “,”“);});}); 我将研究入队脚本。似乎有点复杂..谢谢!
user2806026 2014年

好的。我尝试过这种方法;制作一个名为“ removeArrows.js”的文件,并将其放在我的插件文件夹中。它具有与原始代码相同的内容,但jQuery代替$。然后我将以下内容添加到functions.php; `function wpb_adding_scripts(){wp_register_script('my_amazing_script',plugins_url('removeArrows.js',FILE),array('jquery'),'1.1',true); wp_enqueue_script('my_amazing_script'); } add_action('wp_enqueue_scripts','wpb_adding_scripts'); (对不起,我无法弄清楚如何正确显示代码)这没有用。你能帮我解决吗?
user2806026 2014年

1
请进行编辑并将所有相关信息直接添加到您的问题中 不要使用评论部分添加代码
Pieter Goosen 2014年

Answers:


10

$scrwp_register_script()职能不对。假设您的functions.php位于插件内部,而removeArrows.js位于插件的根目录中,$scr则应如下所示

plugins_url( '/removeArrows.js' , __FILE__ )

另外要注意的一点是,最后加载脚本和样式始终是一个好习惯。这将确保它不会被其他脚本和样式覆盖。为此,只需在优先级参数($priority)中添加一个非常低的优先级(非常高的数字)add_action

 add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

始终通过wp_enqueue_scripts动作钩子加载/排队脚本和样式,因为这是要使用的正确钩子。不要将脚本和样式直接加载到wp_headwp_footer

编辑

对于主题,正如您已经指出的那样,现在将所有内容移至主题,您$scr将更改为

 get_template_directory_uri() . '/removeArrows.js'

家长主题和这个

get_stylesheet_directory_uri() . '/removeArrows.js'

用于儿童主题。您的完整代码应如下所示

function wpb_adding_scripts() {
    wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true);
    wp_enqueue_script('my_amazing_script');
} 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

非常感谢您的出色建议。这似乎是使用的方法。不过有一个问题;functions.php在我的主题文件夹中。如果js文件位于同一个主题根文件夹中,我将如何链接它?
user2806026 2014年

您应该将所有内容都保留在插件或主题中,不要拆分它们。如果你是在一个主题,你$scrget_template_directory_uri() . '/removeArrows.js'为父母的主题,并get_templatestylesheet_directory_uri() . '/removeArrows.js'为childthemes
彼得·古森

再次尝试,这次将removeArrows.js直接添加到主题文件夹中,并在functions.php中使用以下内容;函数wpb_adding_scripts(){wp_register_script('my_amazing_script',get_template_directory_uri()。'/removeArrows.js',FILE),array('jquery'),'1.1',true); wp_enqueue_script('my_amazing_script'); } add_action('wp_enqueue_scripts','wpb_adding_scripts',999); 这给了我Parse错误:wp_register_script行上的语法错误,意外的','。
user2806026 2014年

get_template_directory_uri() . '/removeArrows.js', FILE)应该只是get_template_directory_uri() . '/removeArrows.js'
Pieter Goosen 2014年

不。使用您在原始文章底部编辑的完整代码。唯一要做的就是在查看内容时冻结购物车页面。我想我会放弃:-)虽然不得已;您首先提到get_template_directory_uri()是针对父主题的,然后在最后的完整代码中针对子主题。哪有 我的主题是父母:-)
user2806026 2014年

4

我不会添加另一个外部js文件,它只是要获取的额外和不必要的资源,因此我们希望减少页面加载时间。

我会使用wp_head挂钩在您的网站标题中添加此jQuery代码段。您将以下内容粘贴到主题或插件功能文件中。我还确保了jQuery处于无冲突模式,如下所示。

add_action('wp_head','woocommerce_js');

function woocommerce_js()
{ // break out of php ?>

jQuery(document).ready(function($) {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
<?php } // break back into php

完成并刷新页面后,请检查页面源代码,以确保实际上已将此jQuery代码段加载到页面中。如果是,那么它应该可以工作,除非它们在您正在使用的实际jQuery代码段中有问题。


不过,这不是WordPress加载Javascript的方式。请参阅wp_enqueue_script()以获取更多信息。
Pat J

2
嗨,@ PatJ,我同意,要加载包含所有Javascript函数的外部JS库或JS文件,那么绝对可以,这是正确的方法。但是,如果您正在加载一小段Javascript,则没有必要创建一个全新的JS文件并为此添加一个额外的HTTP请求。以Google Analytics(分析)为例,在99%的主题或自定义构建中,JS将通过主题选项或函数文件添加到页眉或页脚中。这种方法通常包括JS甚至CSS代码段。
马特·皇家

1
但是,“常规做法”并没有使它正确。该wp_enqueue_script()文档甚至声明这是链接的JavaScript向WordPress生成页面推荐的方法
Pat J

如果您采用WordPress默认的二十四主题,它将在header.php中加载html5.js。之所以以这种方式授予doe是有理由的,以便检查浏览器是否符合IE <9的条件,但我的意思是,可以理解,排队和推荐是推荐的首选方法,但取决于围绕您的情况的所有其他变量/情况试图实现这一目标可能并不总是最实际的,我认为应该采取一些谨慎措施。你看,我也可能完全错在这个观点上,我很想听听一些真正有经验的家伙怎么说:-)
Matt Royal

感谢您的出色建议。但是我无法使它工作。如果我在我的functions.php的<?php标记内添加您的代码,则会收到“解析错误:语法错误,在/somepath.../functions.php的第1146行中出现意外的<<”。如果我在<?php之外添加它,它似乎只是在页面顶部回显给定的代码。我在这里想念什么?
user2806026 2014年

0

因为答案已经被接受,所以我只想说有另一种方法可以将javascript代码放入页脚中,这已经做了很多次了。

在functions.php文件中:

function load_script_to_remove_arrow(){
?>
<script>
$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
</script>
<?php
}
add_action( 'wp_footer', 'load_script_to_remove_arrow' );

您可以仅通过使用条件将此脚本加载到特定页面模板

if( is_page_template( 'page-template.php' ) ):

//put above code (or just add_action part) inside this condition to load file only if the condition is true 

endif;

如果page-template.php位于目录中(例如主题根目录中的templates目录),则可以这样写:

is_page_template( 'templates/page-template.php' );

我不建议像这样将JavaScript“烘焙”到页脚中。它防止了它不可钩挂或不可修改(至少很容易),这在插件和主题开发中非常重要。如果您是网站的最终用户,并且需要快速的脚本或其他内容,请继续使用它-但即使如此,它仍然wp_enqueue_script()几乎总是普遍更好,更灵活。
Xhynk

-1

要回答这个问题,我们必须首先区分javascript和JQuery。

以简单的方式陈述它:

  • Javascript基于ECMAScript
  • jQuery是Java库

因此,实际上您会问两个不同的问题:

  • 您的标题是有关实现javascript的解决方案
  • 您的问题涉及实现JQuery的解决方案

由于Google搜索结果显示了您的标题,并且页面上所有有关JQuery的内容都在讨论,因此这对于搜索javascript解决方案的人们可能会非常沮丧。

现在,对于JQuery解决方案:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);

和javascript解决方案:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );

可以将此代码添加到您的functions.php中,两种情况下脚本的位置均为 wp-content/themes/theme-name/js/script.js

编码愉快!


在OP发布时,开发人员确实可以交替使用jquery和javascript。它一点也不准确,但这是jquery的流行程度以及javascript缺少多少功能。
洛基凯夫
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.