概要
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');
おわり。
