広告 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()で衝突を回避すると、下に示すように、問題なく両者のプレーヤが混在できました。

 

次に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を兼用するショートコードの作成

Post Snippetsプラグインのインストールや使い方は、「小技・事例集」を参照してください。

Post Snippets(バージョンは3.1.6) 設定画面は以下の通りで、番号を振ったエリアに従って説明します。 (Post Snippets の最新バージョンは4.xになっていますが、一部不具合と使い勝手が悪く3.1.6バージョンを使っています。)

先ず、「Add New Snippet」ボタンを押します。

エリアのUntitledにショートコードの名称を記入します。 ショートコード名を、 【AudioJS_player】 にしました。

エリアに下のHTMLコードをコピペします。

  • {src}:Player単体で使用する時の音声ファイルアドレスを入力する変数(オプション)
  • {pre}:preloadの略、音声ファイルを先読みするか否かを指定する変数(オプション)
  • {my_color}、{position}、{my_size} :div.js_playerのclassを追加してPlayerのデザインを変更する変数(オプション)
  • {content}:囲み型ショートコードになり、PlayList用のリストを終点の[[/AudioJS_player]]で囲む

Variables(変数)をカンマ区切りで記述し、「 =」の後がデフォルト値になります。 下で示す内容を  エリアに記述します。

pre=none,src=url.mp3,my_style=margin: 0 auto;,my_color,my_size=px300

エリアにショートコード化するので、レ点を入れます。  エリアにはPHPを使っていないので無記入のままです。

エリアにショートコードの簡単な説明を記載します。(下記は参考です)

audiojs用のplayer:preはpreloadで、autoで先読み込み 単体使用時にsrcに音源ファイルURLを記入 my_size:px300で横幅300px固定  終点を【/AudioJS_player】で囲む

以上で、【AudioJS_player】 ショートコードの完成です。 

 

【AudioJS_player】 ショートコードを使う

audiojs Player単体で使用する場合

第3楽章:Larghettoの再生
 shortcode
[AudioJS_player pre="none" src="Sound3.mp3" my_style="" my_color="blue" my_size="px300"][/AudioJS_player]

第4楽章:Allegroの再生
 shortcode
[AudioJS_player pre="none" src="Sound4.mp3" my_style="" my_color="red" my_size="px300"][/AudioJS_player]

 

audiojs PlayListで使用する場合
 shortcode
[AudioJS_player pre="none" src="url.mp3" my_style="" my_color="green" my_size=""]
<ol class="audio" style="list-style: none;">
<li class=""><a href="#!" data-src="Sound1.mp3">第1楽章:Affettuoso (02:54)</a></li>
<li class=""><a href="#!" data-src="Sound2.mp3">第2楽章:Allegro (02:33)</a></li>
<li class=""><a href="#!" data-src="Sound3.mp3">第3楽章:Larghetto (02:59)</a></li>
<li class="last"><a href="#!" data-src="Sound4.mp3">第4楽章:Allegro (02:49)</a></li>
</ol>
[/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()は非常に有用です。

 

スポンサーリンク

 

スポンサーリンク