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

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

新規登録して質問してみよう
ただいま回答率
85.49%
jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

WordPress

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

508閲覧

WordPressでjQuery読み込みタイミングを工夫したい

dakarakarad

総合スコア17

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

WordPress

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/02/13 12:08

編集2019/02/13 12:13

###実現したいこと
オートコンプリートの実装にあたり、jQueryの読み込みを適切なタイミングにしたいです。

###ソースコードと問題点
まずこちらのソースコードで、オートコーンプリート自体はできています。

<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <input type="text" id="hogehoge" class="ui-autocomplete-input" autocomplete="off"> <script> (function($){ var wordlist = [ "あいうえお", "かきくけこ",]; $( "#hogehoge" ).autocomplete({ source: wordlist }); })(jQuery); </script>

しかしある事情(後述の補足)により上のjQueryを「single.php」に直接書いておりまして、その場合にオートコンプリートが効かなくなるというのが問題です。

###試したこと
ご参考になるかわかりませんが、上のjQueryを「single.php」ではなく「my_js.js」というファイルに書いて次のようにフッターで読み込めば、オートコンプリートが効くようになります。

functions.php

php

1wp_register_script( 'my_js', 'http://example.com/wp-content/themes/simplicity-child/js/my_js.js', 2array('jquery'), 3date('U'), 4true);

しかしこの読み込みタイミングを「true(フッター)」から「false(ヘッダー)」にすると効かなくなってしまいますので、どうやら問題の原因は読み込みタイミングにあるように思われます。

とはいえこの原因がわかっても、「single.php」に直接書いている限り読み込みタイミングをフッター側になど変更できません。(自分はその方法を知りません。)

どのようにすれば上のjQueryを「single.php」に直接書いたままで、オートコンプリートを実装できるでしょうか?

###補足
ちなみに上のjQueryを「single.php」に直接書かなければならないワケは、「single.php」のget_termsで取得したタクソノミーを、JSONで配列に渡して、オートコンプリート用に使うためです。

(このときjQueryを「my_js.js」に書いても「single.php」のタクソノミーが取得できないので、「single.php」に直接書いているという感じです。)

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

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

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

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

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

dakarakarad

2019/02/13 15:13

はい、JSもPHPも何も出ておりません。すると質問の構造自体は一見して正常なのでしょうか?
kei344

2019/02/13 15:51

どうして「すると」になるのかわかりませんが、動く時と動かない時があるのであれば、動かない時にエラーがあるのではと思っただけです。
dakarakarad

2019/02/13 17:06

そうですか。動くかかどうかは「試したこと」にある読み込みタイミングが原因ではないかと考えています。いかがでしょうか。もしそうであれば「single.php」に書きつつ、フッターで読ませるような方法があれば解決するでしょうし、または「single.php」のget_termsで取得したタクソノミーを「my_js.js」で取得することができれば解決すると思っています。そのあたりについてはご考察頂けませんか?
Lhankor_Mhy

2019/02/14 00:40

『jQueryを「single.php」に直接書かなければならないワケは、「single.php」のget_termsで取得したタクソノミーを、JSONで配列に渡して、オートコンプリート用に使うため』とありますが、一読した感じ、それは理由にならないのではないかと思いました。 wordpress はあまり詳しくないのですが、single.php から header.php を呼んでいるはずなので、そこに記述しなくても問題は起きなさそうな気がします。実際にお試しになりましたか?
dakarakarad

2019/02/14 12:00

たしかにheader.phpに書けばいい話ではありました…。ただWordpressには「wp_localize_script」という関数があるようなので今回はこれを使い、single.phpやheader.phpなどのテンプレートファイルではなく、funtions.phpへの記載によって解決できました。
guest

回答1

0

ベストアンサー

「single.php」のget_termsで取得したタクソノミーを、JSONで配列に渡して

WPにはPHPのデータをjsに渡すための方法として
wp_localize_scriptっていう関数が用意されてるのでそれを使いましょう
そうすれば直書きのJSのコード内にjsonを出力する必要もないです

「single.php」に書きつつ、フッターで読ませるような方法

これはwp_print_footer_scriptsのフィルタフックでscriptタグを出力する感じで
callbackは無名関数にしてuseでデータを渡してやるとかする感じで

投稿2019/02/14 08:23

KazuhiroHatano

総合スコア7804

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問