概要
youtubeから秒数指定のURLを取ってくるのが面倒な時に使うショートコードです。
発言集を作っているうちにだんだん疲れてきたので作りました。
もっと早く作ればよかった…。
更新履歴
2020-07-23 タイムゾーンがUTCでないサーバーだと時間がずれるので修正しました
2020-07-17 「分:秒」形式に対応しました、桁埋めができるようになりました
2020-07-11 「秒」形式に対応しました、24時間超えの場合は強制的に「00:00:00」になります。
ショートコード
下記のようにvに動画ID、tに時間を指定するとその指定時間へのYoutubeリンクが作られます。
「分:秒」「時:分:秒」形式に対応しています。
[[v_time v=lqXm8xtYDV0 t=1:57:38]] [[v_time v=yDn9UwxxDF8 t=10:45]] [[v_time v=XlX3WpFblm4 t=2]] [[v_time v=iNXffIUW_2U t=30:99:85]]
表示させると下記のようなリンクになります。動画IDはURLのv=のあとの文字です。
24時間超えの場合は強制的に「00:00:00」になり、時間指定はつきません。
01:57:38
00:10:45
00:00:02
00:00:00
function.phpに下記のように書くと使えます。
// 指定された動画ID、時間のYouTubeリンクを作成する function sc_v_time($atts){ $atts = shortcode_atts(array( "v" => null, "t" => "00:00:00" ),$atts); $time = explode(':',$atts['t']); $h = 0; $m = 0; $s = 0; if(count($time) == 3){ //[00:00:00]形式の場合 $h = $time[0]; $m = $time[1]; $s = $time[2]; }else if(count($time) == 2){ //[00:00]形式の場合 $m = $time[0]; $s = $time[1]; }else if(count($time) == 1){ //[00]形式の場合 $s = $time[0]; } //常にHH:mm:ssで表示したいため、桁操作しなくていいようにUnix時間からの秒数でtを出してフォーマットもする $date = new DateTimeImmutable(); //日本のサーバーだと時刻がずれるのでtimezoneをUTCに変更 $date = $date->setTimezone(new DateTimeZone('UTC')); $date = $date->setDate(1970,1,1); $date = $date->setTime($h,$m,$s); $label = $date->format("H:i:s"); $t = $date->getTimestamp(); $url = "https://www.youtube.com/watch?v=".$atts['v']."&t=".$t; //tが1日を超えていたら強制的に0にする $day_sec = 24*60*60; if($t >= $day_sec){ $t = 0; $label = "00:00:00"; $url = "https://www.youtube.com/watch?v=".$atts['v']; } return '<a href="' .esc_url($url). '" rel="noopener" target="_blank">'. esc_html($label) .'</a>'; } add_shortcode('v_time','sc_v_time');
おわり。