広告 WordPress関連

jQueryのeach() を使って、WordPress付属のaudio Playerとaudiojs Playerの衝突を避ける

WordPressでオーディオファイルを埋め込む際、多くの場合はWordPressに付属している標準のaudio Player([audio] ショートコード)や、プレイリスト機能を使用していると思います。 ただし、プレイリストの場合は、再生がエンドレスループになるなど、オプションに乏しいという仕様上の制約があります。

そのため、過去記事で紹介したような、カスタマイズが容易な「audiojs」を使ったプレイリストを利用したくなる場合もあります。
ところが、どちらも<audio>タグをラップして動作しているため、同一ページ内で両者を併用すると衝突(コンフリクト)が発生し、表示の不具合などによって正常に動作しないことがあります(※下記に衝突事例を掲載)。

そこで今回は、WordPressの同一ページ内でaudiojs PlayerとWordPress標準のaudio Playerを混在させるために、audiojs要素に対してjQueryのeach()文を適用し、コンフリクトを回避する方法を備忘録としてまとめました。

さらに、Post Snippetsプラグインを使って、audiojsプレーヤー用とプレイリスト用を簡単に切り替えられるショートコードの作成方法もあわせて紹介します。

Playerの衝突・事例

Playerが2重に表示されてしまう!(^_^;)

WordPress標準のaudio Playerとaudiojs Playerの衝突を避ける

ここでは、div.js_player 要素内に <audio> タグを配置し、jQuery の each() を使って一意のindex(連番)を割り振ることで、audiojs ライブラリを複数のプレイヤー間で使い回すことができます。 

ヒント:複数配置したaudiojs PlayerをChromeブラウザの「検証」で要素を見てみると、夫々のaudiojs Player のdiv.js_player 要素には、上から順番にid="audiojs_wrapper0" 、id="audiojs_wrapper1"・・・id="audiojs_wrappern"が自動的に付与されているのが確認出来ました。 つまりこの、一意のidにより衝突を避けることが出来るのですね!

これで、標準のaudio Playerとaudiojs Playerの衝突を簡単に回避できます。  下にBefore、Afterで示します。

Before(今迄の方法でaudiojsを使用する)

After(jQueryのeach文で衝突を回避)

オペレータ
オペレータ
audiojs Playerを jQueryのeach()で衝突を回避すると、下に示すように、問題なく両者のプレーヤが混在できました。

audiojs Player(Default)

 

 

次にjQuery の each() 利用して audiojs PlayList へ展開してみます。

WordPress標準のPlayListは、メディアIDを指定すると簡単にプレイリストが作成できますが、オプションの指定が乏しく全曲が終了しても最初の曲にループしてエンドレスに再生が継続するという難点があります。 一方 audiojsですと、外観のカスタマイズも容易で、ループをOFFにすることも出来るようになります。 下に今回のjQuery の each() を使った audiojs PlayList を示します。

ヘンデルのバイオリン・ソナタ 第4番 ニ長調 作品1の13

(Vn:グリュミオー /チェンバロ : ラクロワ ) 1966年録音の音源
MP3 160kbps 44.1khz 

オペレータ
オペレータ
jQueryのeach() を利用したPlayListのコードを下に示します。

HTMLコード

WordPressの場合:テキストエディタにして記述

<li class="last">のlastを削除すると、最終曲から最初の曲にループ再生できます。 

CSS スタイルコード

WordPressの場合:Stylesheet (style.css)に記述

 

jQuery コード(Playe単体とPlayList兼用)

WordPressの場合:</body>の直前に記述

 

Post Snippets でaudiojs Player単体と PlayListを兼用するショートコードの作成

こちらのページに移動しました。

 

今回のまとめ

  1. each()文を使用することで、audiojs PlayerとWordPress標準のaudio Playerを同一ページに複数配置しても、衝突を回避できます。
  2. Post Snippetsプラグインで作成した【AudioJS_player】ショートコードを使えば、投稿ページにaudiojsの単体プレーヤーまたはプレイリストを簡単に挿入できます。
  3. forEach()文の適用により、複数配置されたaudiojs Player(or PlayList)の中で、再生ボタンを押したプレーヤーのみが優先されるようになり、排他的な動作が行える様に改善できました。

 

以上、jQueryのeach() を使ったaudiojs PlayerとWordPress標準のaudio Playerの衝突を避ける方法でした。 jQueryのeach()は非常に有用です。

 

スポンサーリンク