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スニペットソース


それはクレイジーです:矢印を生成するコードで矢印を編集できませんか?(または、外部ソースからダウンロードされますか?)いずれの場合も、カートブロック内のすべてのHTMLの2回の読み取りと書き込みを回避するために、両方の置換を1つの関数で実行できます。それを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 14年

はい。私はこのアプローチを試しました。'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 14年

1
編集を提出し、すべての関連情報を直接質問に追加してください。 コメントセクションを使用してコードを追加しないでください
Pieter Goosen

回答:


10

あなたの$scrあなたのwp_register_script()機能は間違っています。functions.phpがプラグイン内にあり、removeArrows.jsがプラグインのルートにあるとすると、次の$scrようになります。

plugins_url( '/removeArrows.js' , __FILE__ )

もう1つの注意点として、スクリプトとスタイルを最後にロードすることは常に良い習慣です。これにより、他のスクリプトやスタイルによって上書きされないことが保証されます。これを行うには、優先度パラメータ($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 ); 

すばらしいアドバイスをありがとうございました。これは使用するアプローチのようです。ただし、1つの質問があります。functions.phpは私のテーマフォルダーにあります。同じテーマルートフォルダーにある場合、jsファイルをどのようにリンクしますか?
user2806026 14

すべてをプラグインまたはテーマに保持し、分割しないでください。テーマに参加している$scr場合get_template_directory_uri() . '/removeArrows.js'、親テーマと子テーマが対象になりますget_templatestylesheet_directory_uri() . '/removeArrows.js'
Pieter Goosen

もう一度試してみましたが、今回はテーマフォルダーに直接removeArrows.jsを追加し、functions.phpで以下を使用します。関数wpb_adding_scripts(){wp_register_script( 'my_amazing_script'、get_template_directory_uri() '/removeArrows.js'。FILE)、アレイ( 'jqueryの')、 '1.1')、真。wp_enqueue_script( 'my_amazing_script'); } add_action( 'wp_enqueue_scripts'、 'wpb_adding_scripts'、999); これにより、解析エラーが発生します。構文エラー、wp_register_script行の予期しない「、」。
user2806026 14年

get_template_directory_uri() . '/removeArrows.js', FILE)ちょうどする必要がありますget_template_directory_uri() . '/removeArrows.js'
ピーターグーセン2014年

いいえ。編集した完全なコードを元の投稿の下部に使用しました。コンテンツを表示するときにカートページを凍結するだけです。私はあきらめるつもりだと思います:-)でも最後の手段です。最初に、get_template_directory_uri()は親テーマ用であり、最後の完全なコードでは子テーマ用であることを説明しました。どっち?私のテーマは親です:-)
user2806026 '27 / 06/27

4

私は別の外部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スニペットで何かがずれていない限り、それは機能するはずです。


ただし、WordPressでJavaScriptをロードする方法ではありません。詳細についてはwp_enqueue_script()、を参照してください。
Pat J

2
こんにちは、@ PatJ、私は同意します。外部のJSライブラリまたはすべてのJavaScript関数を含むJSファイルをロードすることに対して、そうです、それは間違いなく正しい方法です。ただし、JavaScriptのスニペットをロードしている場合は、まったく新しいJSファイルを作成して、そのためだけにHTTPリクエストを追加することは意味がありません。Google Analyticsを例にとると、99%のテーマまたはカスタムビルドでは、JSはテーマオプションまたは関数ファイルを介してヘッダーまたはフッターに追加されます。JSまたはCSSスニペットをこの方法で含めるという一般的な慣習。
Matt Royal

1
しかし、「一般的な慣習」はそれを正しくしません。wp_enqueue_script()ドキュメントはさえ状態これはWordPress生成されたページにJavaScriptをリンクする方法をお勧めします
Pat J

WordPressのデフォルトの24テーマを使用すると、header.phpにhtml5.jsが読み込まれます。ブラウザのチェックがIE <9の条件を満たすことを理由として、このようにdoeを許可しましたが、私のポイントは、当然のことながら、エンキューが推奨され、推奨される方法ですが、他のすべての変数/状況によって異なりますそれを達成しようとすることは常に最も実用的であるとは限らないかもしれません、そして私はいくつかの裁量が使われるべきだと思います。見て、私もこの見方で完全に間違っている可能性があります。本当に経験豊富な人たちが何を言っているのか聞いてみたいです:-)
Matt Royal

あなたの素晴らしい提案をありがとう。私はそれを動作させることはできません。functions.phpの<?phpタグ内にコードを追加すると、「解析エラー:構文エラー、/ 1461行の/somepath.../functions.phpに予期しない「<」が表示されます。<?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がディレクトリにある場合(たとえば、テーマのルートディレクトリのテンプレートディレクトリ)、次のように記述できます。

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

JavaScriptをこのようにフッターに「ベイク」することはお勧めしません。プラグインやテーマの開発で非常に重要な、(少なくとも簡単に)フックしたり変更したりできないようにします。あなたがサイトのエンドユーザーであり、簡単なスクリプトや何かが必要な場合は、それを試してくださいwp_enqueue_script()
Xhynk 2018

-1

この質問に答えるには、まず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

幸せなコーディング!


OPが投稿された頃、開発者はjqueryとjavascriptを同じように使用していました。それはまったく正確ではありませんが、jqueryがどれほど人気が​​あり、javascriptに機能が不足している量でした。
ロッキーケフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.