Functions.phpにJavascriptを正しく追加する方法
-
-
それはクレイジーです:矢印を生成するコードで矢印を編集することはできませんか?(または、外部ソースからダウンロードされますか?)いずれの場合も、カートブロック内のすべてのHTMLを2回読み書きすることを回避するために、単一の関数で両方の置換を実行できます.これをfunctions.phpからページに直接挿入する方法はわかりませんが、別のスクリプトファイルに保存して(まだ持っていない場合は追加できます)、[`wp-enqueue-script`](http://codex.wordpress.org/Function_Reference/wp_enqueue_script)それ.また、 `$`を `jQuery`に変更する必要があります(そのページのセクション7を参照)That's crazy: can't you edit the arrows out in the code that generates them? (Or is it downloaded from an external source?) In any case you can do both replaces in a single function to avoid reading and writing all the HTML inside the cart block twice. I don't know a way to directly inject that into the page from functions.php but you can save it in a separate script file (if you don't already have one you can add it to) and then [`wp-enqueue-script`](http://codex.wordpress.org/Function_Reference/wp_enqueue_script) it. You'll also have to change the `$`s to `jQuery` (see that page section 7)
- 0
- 2014-06-25
- Rup
-
いいえ、挿入する前に削除することはできないと確信しています.可能であれば、私はそれを行う方法を見つけることができませんでした. 単一の関数に追加することの良い点.このようになりますか? $(document).ready(function(){ $( ".woocommerce-cart").html(function(i、val){ return val.replace( "→"、 ""); return val.replace( "←"、 ""); }); }); エンキュースクリプトを調べます.少し複雑そうですが..ありがとう!Nope, I'm pretty sure it can't be removed before inserted. If it can, I haven't been able to find a way to do it. Good point about adding it in a single function. Would it look like this? $(document).ready(function() { $(".woocommerce-cart").html(function(i, val) { return val.replace(" →", ""); return val.replace("← ", ""); }); }); I will look into the enqueue script. Seems a bit complicated, though.. Thanks!
- 0
- 2014-06-25
- user2806026
-
はい.私はこのアプローチを試しました. 'removeArrows.js'という名前のファイルを作成し、プラグインフォルダーに配置しました.これは、$の代わりにjQueryを除いて、元のコードと同じ内容です. 次に、functions.phpに以下を追加しました. `関数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'); (申し訳ありませんが、コードを正しく表示する方法がわかりません) これは機能しませんでした.修正を手伝ってもらえますか?Okay. I tried this approach; Made a file named 'removeArrows.js' and placed it in my plugin folder. This has the same content as the original code, except jQuery instead $. then I added the following to 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' ); (Sorry, I cant figure out how to make the code display properly) This did not work. Can you help me fix it?
- 0
- 2014-06-25
- user2806026
-
[編集]を提出し、関連するすべての情報を**質問に直接追加してください**コメントセクションを使用してコードを追加しないでくださいPlease file an [edit] and add all relevant info **directly to your question** Do not use the comment section to add code
- 1
- 2014-06-26
- Pieter Goosen
-
4 回答
- 投票
-
- 2014-06-26
$scr
内のwp_register_script()
機能が間違っています.関数.phpがプラグイン内にあり、removeArrows.jsがプラグインのルートにある場合、wp_register_script()
は次のようになりますplugins_url( '/removeArrows.js' , __FILE__ )
もう1つの注意点として、スクリプトとスタイルを最後にロードすることをお勧めします.これにより、他のスクリプトやスタイルによって上書きされないようになります.これを行うには、$priority)に非常に低い優先度(非常に高い数値)を追加するだけです. rel="noreferrer">
add_action
.add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
そして常に
に直接ロードしないでくださいwp_enqueue_scripts
アクションフック.これは、使用するのに適切なフックです. スクリプトとスタイルをwp_head
またはwp_footer
編集
テーマの場合、すべてをテーマに移動したことを示したので、
wp_register_script()
はこれに変更されます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 );
Your
$scr
in yourwp_register_script()
function is wrong. Given that your functions.php is inside your plugin, and your removeArrows.js is in the root of your plugin, your$scr
should look like thisplugins_url( '/removeArrows.js' , __FILE__ )
Another point of note, it is always good practice to load your scripts and styles last. This will ensure that it will not get overriden by other scripts and styles. To do this, just add a very low priority (very high number) to your priority parameter (
$priority
) ofadd_action
.add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
And always load/enqueue scripts and styles via the
wp_enqueue_scripts
action hook, as this is the proper hook to use. Do not load scripts and styles directly towp_head
orwp_footer
EDIT
For themes, as you've indicated that you now moved everything to your theme, your
$scr
would change to thisget_template_directory_uri() . '/removeArrows.js'
for parent themes and this
get_stylesheet_directory_uri() . '/removeArrows.js'
for child themes. Your complete code should look like this
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 );
-
あなたの素晴らしいアドバイスをどうもありがとう.これは、使用するアプローチのようです.ただし、1つの質問です.関数.phpは私のテーマフォルダーにあります.jsファイルが同じテーマルートフォルダーにある場合、どのようにリンクしますか?Thanks a lot for your great advice. This seems like the approach to use. One question though; the functions.php is in my theme folder. How would I link the js-file if it's just in the same, theme root folder?
- 0
- 2014-06-26
- user2806026
-
すべてをプラグインまたはテーマに保持する必要があります.分割しないでください.テーマを使用している場合、 `$ scr`は`get_template_directory_uri()になります.親テーマの場合は「/removeArrows.js」、「get_templatestylesheet_directory_uri()」の場合.子テーマの場合は「/removeArrows.js」You should keep everything in a plugin or in a theme, don't split them. If you are in a theme, your `$scr` would be `get_template_directory_uri() . '/removeArrows.js'` for parent themes, and `get_templatestylesheet_directory_uri() . '/removeArrows.js'` for childthemes
- 0
- 2014-06-26
- Pieter Goosen
-
今回は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); これにより、解析エラーが発生します:wp_register_script行に構文エラー、予期しない '、'.Tried again, this time adding the removeArrows.js directly in theme folder and using the following in functions.php; function 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 ); this gives me Parse error: syntax error, unexpected ',' on the wp_register_script line.
- 0
- 2014-06-26
- user2806026
-
`get_template_directory_uri().'/removeArrows.js'、FILE) `は`get_template_directory_uri()である必要があります.'/removeArrows.js'``get_template_directory_uri() . '/removeArrows.js', FILE)` should just be `get_template_directory_uri() . '/removeArrows.js'`
- 0
- 2014-06-26
- Pieter Goosen
-
いいえ.編集した完全なコードを元の投稿の下部に使用しました.内容を表示するときにカートページをフリーズするだけです.私はただあきらめると思います:-) 最後の手段です.get_template_directory_uri()は親テーマ用であり、最後の完全なコードでは子テーマ用であることに言及することから始めました.どっち?私のテーマは親です:-)Nope. Used your completely code you edited into the bottom of your original post. Only thing it does is to freeze the cart page when viewing the contents. I think I'll just give up :-) One last resort though; you started by mentioning that get_template_directory_uri() is for parent themes, and then in the final complete code that it's for child themes. Which is it? My theme is a parent :-)
- 0
- 2014-06-27
- user2806026
-
申し訳ありませんが、そこにコピーアンドペーストエラーがありました.完全なコードの最後の部分は、親テーマ用です.これが機能しない場合は、スクリプトを確認する必要がありますSorry, made a copy and paste error there. The last piece of complete code is for parent theme. If this doesn't work, you will need to have a look at your script
- 0
- 2014-06-27
- Pieter Goosen
-
- 2014-06-25
別の外部jsファイルを追加することはありません.これは、フェッチするための余分で不要なリソースであり、ページの読み込み時間の観点から削減したいものです.
wp_head
フックを使用して、このjQueryスニペットをWebサイトのヘッドに追加します.テーマまたはプラグインの関数ファイルに以下を貼り付けます.また、以下に示すように、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スニペットで何かがずれていない限り、機能するはずです.
I would not add another external js file, its just an extra and unnecessary resource to fetch and that is something we want to cut down on in terms of page loading times.
I would add this jQuery snippet in your websites head using the
wp_head
hook. You would paste the following in your theme or plugins functions file. I have also made sure jQuery is in no-conflict mode as you can see below.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
Once you have done this and refreshed your page, check the page source to make sure this jQuery snippet is in fact being loaded into your page. If it is then it should work unless their is something off in the actual jQuery snippet you are using.
-
ただし、これはJavascriptをロードするWordPressの方法ではありません.詳細については、[`wp_enqueue_script()`](https://codex.wordpress.org/Function_Reference/wp_enqueue_script)を参照してください.That's not the WordPress way to load Javascript, though. See [`wp_enqueue_script()`](https://codex.wordpress.org/Function_Reference/wp_enqueue_script) for more information.
- 0
- 2014-06-25
- Pat J
-
こんにちは@PatJ、私は同意します.すべてのJavascript関数を含む外部JSライブラリまたはJSファイルをロードする場合、それは絶対に正しい方法です.ただし、Javascriptのスニペットをロードする場合は、まったく新しいJSファイルを作成して、そのためだけにHTTPリクエストを追加することは意味がありません.たとえば、Google Analyticsを例にとると、テーマまたはカスタムビルドの99%で、JSはテーマオプションまたは関数ファイルを介してヘッダーまたはフッターに追加されます.この方法でJSまたはCSSスニペットを含めるのが一般的な方法です.Hi @PatJ, I agree, for loading an external JS library or JS file with all your Javascript functions in it, then yes absolutely that would be the correct way. However if you are loading a snippet of Javascript it does not make sense to create a whole new JS file and add an additional HTTP request just for that. Take Google Analytics for example, in 99% of themes or custom builds, the JS will be added into the the header or footer via theme options or functions file. Its common practice to include JS or even CSS snippets this way.
- 2
- 2014-06-25
- Matt Royal
-
しかし、「一般的な慣行」はそれを正しくしません.[`wp_enqueue_script()`ドキュメント](https://codex.wordpress.org/Function_Reference/wp_enqueue_script)も次のように述べています**これは、JavaScriptをWordPressで生成されたページにリンクするための推奨される方法です**."Common practice" doesn't make it correct, though. The [`wp_enqueue_script()` docs](https://codex.wordpress.org/Function_Reference/wp_enqueue_script) even state **This is the recommended method of linking JavaScript to a WordPress generated page**.
- 1
- 2014-06-26
- Pat J
-
WordPressのデフォルトの24テーマを使用すると、header.phpにhtml5.jsが読み込まれます.ブラウザのチェックがIE <9の条件を満たしているという理由で、この方法でdoeを許可しましたが、当然のことながら、キューイングが推奨され、推奨される方法ですが、他のすべての変数/状況によって異なります.それを達成しようとしているのは必ずしも最も実用的ではないかもしれません、そして私はある程度の裁量が使われるべきだと思います.ほら、私もこの見方で完全に間違っているかもしれません、私は本当に経験豊富な人の何人かが言わなければならないことを聞くことに興味があります:-)If you take WordPress default twentyfourteen theme, it loads html5.js in the header.php. Granted its doe this way for a reason so as to check of the browser meets the condition of being IE < 9, but my point is that understandably, enqueuing is the recommended and preferred method but depending on all the other variables/circumstances surrounding what you are trying to achieve it may not always be the most practical and I think some discretion should be used. Look, I could be completely wrong in this view as well, I'm interested to hear what some of the really experienced guys have to say :-)
- 0
- 2014-06-26
- Matt Royal
-
あなたの素晴らしい提案をありがとう.しかし、私はそれを機能させることができません.関数.phpのThanks for your great suggestion. I can't get it to work though; if I add your code inside the
- 0
- 2014-06-26
- user2806026
これをfunctions.phpファイルに貼り付けるときは、functions.phpファイルの1行目にすでに `When you paste it in your functions.php file - remove the first `- 0
- 2014-06-26
- Matt Royal
このJSコードはでラップする必要があります.WPでJSをレンダリングするこの方法は推奨されませんが、場合によっては、ベストプラクティスよりも迅速な解決策の方が重要です.This JS code needs to wrapped in . This method to render JS in WP is not recommended, but in some cases quick solutions are more important than best practices.- 0
- 2020-01-09
- Tahi Reu
- 2018-08-24
答えはすでに受け入れられているので、私が何度も行ったフッターに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' );
As the answer is accepted already so, I just want to say there's another way to enqueue javascript code in footer which I have done many times.
in functions.php file:
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' );
you can load this script to particular page template only by using condition
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;
if the page-template.php is in directory ( say templates directory in your theme's root dir ) you can write like:
is_page_template( 'templates/page-template.php' );
-
このようにJavaScriptをフッターに「ベイク」することはお勧めしません.プラグインとテーマの開発で非常に重要な、フック解除または変更可能(少なくとも簡単に)になるのを防ぎます.あなたがサイトのエンドユーザーであり、簡単なスクリプトなどが必要な場合は、それを選択してください.それでも、ほとんどの場合、 `wp_enqueue_script()`の方が普遍的に優れており、柔軟性があります.I would not recommend "baking" the JavaScript into the footer like this. It prevents it from being unhookable or modifiable (at least, easily) which is extremely important in plugin and theme development. If you're the end-user of a site and need a quick script or something, go for it - but even still `wp_enqueue_script()` is almost always universally better and more flexible.
- 0
- 2018-08-24
- Xhynk
- 2018-08-24
質問に答えるには、最初にjavascriptとJQueryを区別する必要があります.
簡単に説明するには:
- JavascriptはECMAScriptに基づいています
- JQueryはJavascript用のライブラリです
実際には、2つの異なる質問をします.
- あなたのタイトルは、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
ハッピーコーディング!
To answer the question we must first make a distinction between javascript and JQuery.
To state it in a simple fashion:
- Javascript is based on ECMAScript
- JQuery is a library for Javascript
So in reality you ask two different questions:
- Your title speaks about a solution for implementing javascript
- Your question speaks about a solution for implementing JQuery
Because the Google results show your title and all the content of the page talks about JQuery this can become very frustrating to people that search for a javascript solution.
And now for the JQuery solution:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);
And the javascript solution:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );
This code can be added to your functions.php The location of the scripts in both cases is
wp-content/themes/theme-name/js/script.js
Happy coding!
-
OPが投稿された頃、開発者はjqueryとjavascriptを同じ意味で使用していました.それはまったく正確ではありませんが、jqueryがどれほど人気があり、javascriptが機能を欠いているかということでした.Around the time when OP posted, devs did use jquery and javascript interchangeably. It's not at all accurate, but it was how popular jquery was and how much javascript was missing features.
- 0
- 2020-04-29
- Rocky Kev
WooCommerceのカートボタンに標準である見苦しい矢印をいくつか削除したいと思います.これを実現するために、次のコードを追加するヒントを見つけました.これにより、ドキュメントが読み込まれたときに矢印が削除されます.
functions.phpに入れると思いますか?どのくらい正確にそれをしますか?
編集
わかりました.私はこのアプローチを試しました:
「removeArrows.js」という名前のファイルを作成し、プラグインフォルダーに配置しました.これは、$の代わりにjQueryを除いて、元のコードと同じ内容です.次に、functions.phpに以下を追加しました.
コードを正しく表示する方法がわかりません.これは機能しませんでした.これを機能させるための提案はありますか?
jQueryスニペットソース