ようこそのお運びで、厚く御礼申し上げます。
58日目です。今回も引き続きYouTubeの埋め込みです。前回よりちょっと機能を足したものになります。
ショートコードを使ってVideo IDやURLを指定し、レスポンシブデザインなYouTubeを埋め込む。また再生リストの埋め込みも実現させる。
ショートコードを使って、属性でVideo IDやURLを指定し、レスポンシブデザインに対応したYouTubeを記事内に埋め込みます。また再生リストの埋め込みを実現させてみます。
今回の仕様は
今回はショートコード名を「myYoutube」として属性は「id」でVIDEO_IDと「l_id」で再生リストID、それとyoutubeから直接URLを貼付けるだけで良い「url」も指定できるようにしました。
※id、l_idが指定されていた場合は、urlよりid、l_idが優先されます。
表示は、レスポンシブデザインに対応させて画面100%で表示できるように。
再生リストは以下のように表示されます。
投稿を表示
まずは、functions.phpに書いてみます。
では、function.phpに以下のコードを書きました。
new Paka3_MyYoutube; class Paka3_MyYoutube{ public function __construct(){ add_shortcode('myYoutube',array($this,'myYoutubeFunc')); //スタイルシート(埋め込み) add_action( 'wp_head',array($this,'paka3_post_css')); } public function myYoutubeFunc($atts,$contents=null){ //ショートコードに定義した値を取得&デフォルト値 extract( shortcode_atts( array( 'id' =>"", //video_id: 'l_id' =>"", //listid 'url' =>"", //url ), $atts) ); if(!$id && !$url) return false; //コンテンツにはURL $url =sprintf(esc_html("%s"),$url); //*videoIDを取得(urlよりid属性が優先) $v_id = sprintf(esc_html("%s"),$id); if(!$v_id){ $v_id=preg_replace('/.*v=([\d\w\-]+).*/', '$1', $url) ; if($v_id==$url) $v_id=preg_replace('/.*youtu\.be\/([\d\w\-]+)/', '$1', $url) ; } //*再生リストID $l_id = sprintf(esc_html("%s"),$l_id); if(!$l_id){ $l_id=preg_replace('/.*list=([\d\w\-]+).*/', '$1', $url) ; } //*URLの生成 //video_idとlist_idがあった場合はvideo_id優先 $html="URLからIDが見つかりませんでした。"; if($v_id!=$url && $l_id!=$url){ $arg["src"] = "http://www.youtube.com/embed/".$v_id."?listType=playlist&list=".$l_id; $html=$this->myYoutubeView($arg); }elseif($v_id!=$url){ //http://www.youtube.com/embed/VIDEO_ID $arg["src"] = "http://www.youtube.com/embed/".$v_id; $html=$this->myYoutubeView($arg); }elseif($l_id!=$url){ //http://www.youtube.com/embed?listType=playlist&list=PLAYLIST_ID $arg["src"] = "http://www.youtube.com/embed?listType=playlist&list=".$l_id; $html=$this->myYoutubeView($arg); } return $html; } //********************* //HTML生成 public function myYoutubeView($arg){ $html = <<< EOSEOS; return $html; } //********************* //適用するCSSを定義 public function paka3_post_css($headers){ echo <<< EOS EOS; } }
ポイントはどこ?
今回は前回の応用ですので、クラス化し、URLの機能を強化した部分以外はほぼおなじです。なので一部だけポイントを紹介します。
ポイントについては前回の記事も参照してください。
- 今回の属性は「id」「l_id」「url」です。
※URLはYouTubeのものを直接コピペするように設定します。//ショートコードに定義した値を取得&デフォルト値 extract( shortcode_atts( array( 'id' =>"", //video_id: 'l_id' =>"", //listid 'url' =>"", //url ), $atts) );
- URLからVIDEO_IDや再生リストIDを抽出します。
正規表現をつかって、文字列を抽出します。
もし、URLのバリエーションを増やすには、ここに追加してください//*videoIDを取得(urlよりid属性が優先) $v_id = sprintf(esc_html("%s"),$id); if(!$v_id){ $v_id=preg_replace('/.*v=([\d\w\-]+).*/', '$1', $url) ; if($v_id==$url) $v_id=preg_replace('/.*youtu\.be\/([\d\w\-]+)/', '$1', $url) ; } //*再生リストID $l_id = sprintf(esc_html("%s"),$l_id); if(!$l_id){ $l_id=preg_replace('/.*list=([\d\w\-]+).*/', '$1', $url) ; }
コードをプラグイン用のファイルにします
それではfunctions.phpに書いたコードを消して、
「Paka3_MyYoutube.php」というファイルを作成し、以下のコードを記入します。
このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。
今回のまとめ
今回は前回の応用編でした。外部サービスを利用する場合は仕様が変わったり、その利用方法が変わったり(たとえばレスポンシブデザインとか)可能性があるので、できるだけviewとcontrollerは分けておいた方が良いのかもしれませんね。