質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

591閲覧

HTML→WordPress化でのJavaScriptがうまく機能しない

matsu33

総合スコア13

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/05/28 15:24

既存のHTMLサイトをWordPress用に書き換えているのですが、JSだけがうまく機能しません。その他はHTMLサイトと同ように機能するのですが。
具体的な内容に関しては

現在画像10数枚がサイトに表示されていてそれをクリックすると、ポップアップ画像として表示、さらに「prev」「next」ボタンで前後の画像表示。(例:4.jpgをクリック→4.jpgがポップアップ表示→prevボタンクリック→3.jpgがポップアップ表示)というものなのですが、

WordPress用の方では、画像10数枚がサイトに表示されていてそれをクリックすると、ポップアップ画像として表示されるところまでは同じなのですが、そこから「prev」「next」ボタンどちらを押しても、勝手に1.jpgに飛ばされます。(例:4.jpgをクリック→4.jpgがポップアップ表示→prev or nextボタンクリック→1.jpgがポップアップ表示→nextボタンクリック→2.jpgがポップアップ表示)となります。

popup自体を機能させるためのJS,ハンバーガーメニューを機能させるためのJSは動作するので、読み込みには問題はなく、JSの書き方、もしくはindex.phpの書き方に問題があるのではと思います。

js

1$(function() { 2 let imageSources = ["./images/image/1.jpg","./images/image/2.jpg","./images/image/3.jpg","./images/image/4.jpg","./images/image/5.jpg","./images/image/6.jpg","./images/image/7.jpg","./images/image/8.jpg","./images/image/9.jpg","./images/image/10.jpg","./images/image/11.jpg","./images/image/12.jpg","./images/image/13.jpg","./images/image/14.jpg","./images/image/15.jpg","./images/image/16.jpg","./images/image/17.jpg"]; 3 4 $('#container-p img').each(function() { 5 let path = $(this).attr("src"); 6 imageSources.push(path); 7 }); 8 let sourceIndex = 0; 9 10 $("#containers-p img").on("click", function () { 11 let img_src = $(this).attr("src"); 12 sourceIndex = imageSources.indexOf(img_src); 13 14 $("#popup-img img").attr("src", img_src); 15 $("#popup-img").toggleClass('active'); 16 }); 17 18 $("#popup-close-btn").on("click", function () { 19 $("#popup-img").removeClass('active'); 20 }); 21 22 $('#popup-prev-btn').on("click", function() { 23 sourceIndex = (sourceIndex + imageSources.length - 1) % imageSources.length; 24 updatePopupImage(); 25 }); 26 27 $('#popup-next-btn').on("click", function() { 28 sourceIndex = (sourceIndex + 1) % imageSources.length; 29 updatePopupImage(); 30 }); 31 32 function updatePopupImage() { 33 $("#popup-img img").attr("src", imageSources[sourceIndex]); 34 } 35}); 36

PHP

1 <div id="popup-img" class="default"> 2 <img src="<?php echo get_template_directory_uri(); ?>/images/image/1.jpg" alt="ポップアップ"> 3 <div id="popup-close-btn" class="popup-close-btn"><i class="fa-solid fa-xmark"></i></div> 4 <div class="popup-change-btn"> 5 <div id="popup-prev-btn" class="change-btn"><i class="fa-solid fa-chevron-left"></i></i></div> 6 <div id="popup-next-btn" class="change-btn"><i class="fa-solid fa-chevron-right"></i></div> 7 </div> 8 </div> 9 <ul id="containers-p" class="containers-p"> 10 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/1.jpg" alt=""></li> 11 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/2.jpg" alt=""></li> 12 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/3.jpg" alt=""></li> 13 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/4.jpg" alt=""></li> 14 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/5.jpg" alt=""></li> 15 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/6.jpg" alt=""></li> 16 <li class="container-p flex-pc"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/7.jpg" alt=""></li> 17 <li class="container-p flex-pc"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/8.jpg" alt=""></li> 18 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/9.jpg" alt=""></li> 19 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/10.jpg" alt=""></li> 20 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/11.jpg" alt=""></li> 21 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/12.jpg" alt=""></li> 22 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/13.jpg" alt=""></li> 23 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/14.jpg" alt=""></li> 24 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/15.jpg" alt=""></li> 25 <li class="container-p"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/16.jpg" alt=""></li> 26 <li class="container-p flex"><img class="pop_trigger" src="<?php echo get_template_directory_uri(); ?>/images/image/17.jpg" alt=""></li> 27 </ul>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsu33

2022/05/29 21:27

HTMLからWordPress化する際に変更した箇所は、imgタグの中のsrに<?php echo get_template_directory_uri(); ?>を追加したところです。 JSはlet imageSourcesの中身を<?php echo get_template_directory_uri(); ?>をつけたものと付けないものを両方試しましたがうまくいきません そもそもJS自体の読み込みはできるのに、HTMLではうまく機能する、PHPでは機能しないということはあり得るのでしょうか。
Lhankor_Mhy

2022/06/02 07:22

ご提示のコードを試してみましたが、問題が再現しませんでした。 おそらく、ご提示の部分には原因はなさそうに思います。 ご提示いただいていない部分に原因があるか、問題の共有が上手くできていないと思います。 問題再現の手順をもう少し詳しく書いていただけますか?
guest

回答2

0

$(function() {
(略)
});

そもそもJS自体の読み込みはできるのに、HTMLではうまく機能する、PHPでは機能しないということはあり得るのでしょうか。

Webブラウザの開発者ツールのコンソールを確認すると「Uncaught TypeError: $ is not a function」等のエラーが出ていないでしょうか。

JavaScript というより jQuery の問題ですね。
WordPress では jQuery 読み込み後に jQuery.noConflict() を実行しているので jQuery を $ で呼び出すことはできません。

Webブラウザにコードは読み込まれているが $ では jQuery が呼び出されないので、動作しないのです。「WordPress jQuery 動作しない」等のキーワードで、検索すると同じような例がいろいろ見つかると思います。

jQuery の jQuery.noConflict() - jQuery日本語リファレンス ドキュメントに

この関数を実行すると、$関数の動作が先に定義されている動作に戻る。
noConflictを使った場合、jQueryオブジェクトの呼び出しには明確に'jQuery'と書く必要がある。
例えば$(“div p”)と書いていたものも、jQuery(“div p”)と書かなければならない。

とあるように $ の代わりに jQuery と明示して呼び出す必要があります。

ただ、すべての $ を jQury に個々に置き換えるのは手間なので、jQuery のコードを

(function($){ // 元のコード })(jQuery);

jQuery(document).ready(function($){ // 元のコード });

のようにカプセル化して対処することが多いと思います。

投稿2022/05/30 00:20

編集2022/05/30 00:21
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

使用しているjQueryのバージョンは同じですか?
console.log("sourceIndex: " + sourceIndex);を各所に入れてDevToolで確認してみてはいかがでしょうか?
そうすることでどこで予想外の動作をするのか見つかられるかもしれません。

  1. let imageSources ...let sourceIndex = 0;はブロックの外に書いたほうがいいかもしれません。
  2. $('#container-p img').each(function() { ...は不要かと。実行されません。
    その上でlet imageSources ...const imageSources ...に。

投稿2022/05/28 19:48

koji

総合スコア111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問