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

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

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

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

JavaScript

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

Q&A

解決済

2回答

2781閲覧

静的サイトにJavaScriptライブラリを入れたが、WordPress化するとJavaScriptが動かない

cheshire-cat

総合スコア73

WordPress

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

JavaScript

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

0グッド

0クリップ

投稿2021/04/04 05:38

編集2021/04/08 05:49

自分で作った静的サイトにScrollHintというJavaScriptのライブラリを入れ、画面が小さい時はスクロールヒントが出るようにしたいと考えました。
https://appleple.github.io/scroll-hint/

ScrollHintを使うためにはscroll-hint.cssとscroll-hint.jsの2つのファイルが必須となります。
それ以外に私がコードを書いたファイル(myscript.js)も必要です。
myscript.jsにはScrollHintの設定のコードの他にjQueryのコードも書いています。

こうして作った静的サイトですが、ScrollHintはきちんと動いてくれました。

そこで次にこの静的サイトをWordPress化したのですが、WordPress化するとScrollHintが動きません。
一方、jQueryのほうはきちんと動いてくれます。

ScrollHintとjQueryはwp_enqueue_style関数とwp_enqueue_script関数を使って、functions.phpから読み込ませています。
コードは以下の通りです。

php

1<?php 2 3function mytheme_enqueue() { 4 5 // 「料金」のページのみscroll-hint.cssを読み込む 6 if(is_page('price')) { 7 wp_enqueue_style( 8 'scroll-hint-style', 9 get_stylesheet_directory_uri().'/css/scroll-hint.css', 10 ); 11 } 12 13 // jQueryを読み込む 14 wp_enqueue_script( 15 'jquery-script', 16 get_template_directory_uri().'/js/jquery-3.5.1.min.js' 17 ); 18 19 // 「料金」のページのみscroll-hint.jsを読み込む 20 if(is_page('price')) { 21 wp_enqueue_script( 22 'scroll-hint-script', 23 get_template_directory_uri().'/js/scroll-hint.js', 24 ); 25 } 26 27 // myscript.jsを読み込む 28 wp_enqueue_script( 29 'myscript', 30 get_template_directory_uri().'/js/myscript.js', 31 ); 32 33} 34add_action('wp_enqueue_scripts', 'mytheme_enqueue');

なぜScrollHintだけが動かないのか原因を調べたのですが、よく分かりませんでした。

たとえばScrollHintのファイルがきちんと読み込めていないのではないか? と思い、ブラウザのディベロッパーツールからscroll-hint.css、scroll-hint.js、myscript.jsの3つのファイルを検索したところ、きちんと発見できました。

またディベロッパーツールのコンソールにエラーが出ていないことから、phpのコードが間違っているわけではないようです。

WordPress化したことから余計な<p>タグや<br>タグが入ったのかとも思いましたが、そのようなタグも入っていません。

いろいろ悩んで調べたところ、静的ファイル時には付いていたクラス名などが、WordPress化の時には付いていないことに気づきました。

どういうことかというと、ScrollHintを使いたいときは、JavaScriptファイルで(私の場合はmyscript.jsで)セレクターを指定して設定をおこなうのですが、設定をおこなうとScrollHintライブラリが自動的に独自のクラス名などを付けてくれます。

私の場合だと、myscript.jsに

JavaScript

1new ScrollHint('.price-table', { 2 applyToParents: true, 3 i18n: { 4 scrollable: 'スクロールできます' 5 } 6});

というコードを書いたのですが、そうするとディベロッパーツールで見たときに、静的サイトではprice-tableの親要素にscroll-hintやis-scrollableといったクラス名が付いたり、あるいはstyle="position:relative" overflow:auto;というスタイルが付きました。

ところがWordPress化したサイトをディベロッパーツールで確認したところ、これらのクラス名やスタイルは設定されていないことに気づきました。。

なぜWordPress化するとこれらのクラス名やスタイルが設定されないのかがわかりません。

先ほども書いたとおり、scroll-hint.css、scroll-hint.js、myscript.jsの3つのファイルはきちんと読み込まれているはずです。それなのになぜクラス名やスタイルが付かないのか? その理由がわかりません。

なんとかこれらのクラス名やスタイルがきちんと設定されるようにしたいのですが、どのようにすればよいでしょうか?

ScrollHintは大勢に使われているライブラリのようですし、ScrollHint自体にバグがあるとは思えません。
とすると私のおこなったWordPress化の過程に問題があるのでしょうが、どこが悪かったのか分かりません。

問題のありそうな点やWordPress化する際のチェック事項などを指摘してくださると助かります。
よろしくお願いします。

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

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

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

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

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

CHERRY

2021/04/04 09:41

WordPress 化したサイトの方で、JavaScript のエラーが出ていないでしょうか?
cheshire-cat

2021/04/04 10:11 編集

確かにJavaScriptのエラーは気にしていませんでした。 けれど指摘を受けWordPress化したサイトで確認しましたが、コンソールを見てもPHPもJavaScriptもエラーはありませんでした。
guest

回答2

0

自己解決

myscript.jsの読み込みが原因でScrollHintが作動しないことが分かりました。

現在のmyscript.jsの読み込ませ方だと、myscript.jsはwp_head()から出力されることになるのですが、これだとScrollHintは動かないようです。

これをwp_footerから出力させることでScrollHintは動いてくれました。myscript.jsの読み込ませ方を次のように修正しました。

PHP

1 // myscript.jsを読み込む 2 wp_enqueue_script( 3 'myscript', 4 get_template_directory_uri().'/js/myscript.js', 5 array(), 6 NULL, 7 true 8 );

myscript.jsの出力先をtrueとすることでwp_footerからの出力となります。

それともう1点。
ScrollHintのJavaScript書き方にも少し手をくわえ、次のように書きました。

JavaScript

1if(document.URL.match(/price/)) { 2 new ScrollHint('.price-table-plan', { 3 applyToParents: true, 4 i18n: { 5 scrollable: 'スクロールできます' 6 } 7 }); 8}

以前に書いたコードでは、料金(price)以外のページでもScrollHintが作動するため、料金以外のページでコンソールエラーが出ていました。

今回のコードによりコンソールエラーが発生しないようになりました。

投稿2021/04/08 05:53

編集2021/04/08 06:16
cheshire-cat

総合スコア73

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

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

0

wp_enqueue_script の第3パラメータで、読み込み順を指定しますが、指定されていませんね。指定していない場合、読み込まれる順番は不明です。

そのため、scroll-hint.js より、scroll-hint.js を使用している myscript.js が、先に読み込まれていたりしないでしょうか?

myscript.js のwp_enqueue_scriptの第3パラメータで、scroll-hint.js に依存すると指定したらどのようになりますか?

(参考) 上記のURL より、

$deps

(配列) (オプション) このスクリプトが依存するスクリプトのハンドルの配列、つまり、このスクリプトより前に読み込まれる必要があるスクリプト。

投稿2021/04/04 21:31

CHERRY

総合スコア25218

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

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

cheshire-cat

2021/04/05 03:22

ご指摘ありがとうございます。 ディベロッパーツールで確認していますが、JavaScriptは上から順にscroll-hint.js 、myscript.jsの順に読み込まれています。 順位の指定というのは書き方や意味が分からなかったので、いままで記述を避けてきたのですが、試しに wp_enqueue_script( 'myscript', get_template_directory_uri().'/js/myscript.js', array('scroll-hint-script'), ); と書いてみましたが(この書き方で合ってますか? 間違っていたら指摘していただけると助かります)、それでもScrollHintは動きませんでした(順位も変わらないし、クラス名なども付きませんでした)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問