# [メタ情報] # 識別子: ダウンロードOK動画パッケージphp_exe # システム名: # 技術種別: Misc # 機能名: Misc # 使用言語: php # 状態: 実行用 # [/メタ情報] 要約: このPHPコード群は、WordPress用のカスタムテンプレートファイル(`dr5.php`、`dr6.php`、`ds5.php`、`ds6.php`)であり、動画再生と字幕表示機能を提供します。URLから`drid`パラメータで動画を特定し、`videoct.json`から動画情報を取得します。Google翻訳の表示を最適化するためのCSSとJavaScriptも組み込まれています。 `dr5.php`と`dr6.php`はそれぞれ高画質と低画質の動画を「枠内字幕」で表示します。ピクチャー・イン・ピクチャー(PiP)や全画面表示時に自動的に字幕を表示し、通常時は非表示にするJavaScript制御が特徴です。動画の下には、現在再生中の字幕行をハイライトし、クリックで該当箇所へシークできる「字幕一覧」がスクロールボックス形式で提供されます。 `ds5.php`と`ds6.php`は、高画質と低画質の動画を「枠外字幕」で表示します。ネイティブ字幕は使用せず、動画の下に独自の領域で字幕を表示し、DOMの差分更新によりGoogle翻訳の安定性を高めています。これらのテンプレートでは字幕一覧は表示されません。 各ファイル間では、画質(高画質/低画質)と字幕表示形式(枠内/枠外)を切り替えるためのリンクが用意されており、ユーザーは好みに応じて視聴体験を選択できます。 dr5.php ```
:root{ --dr5-max: 1920px; } .radio-label{margin-right:10px;font-size:16px;color:#0073aa;text-decoration:underline} .radio-label.selected{font-weight:bold;color:#000;text-decoration:none;cursor:default} .video-wrap{position:relative;width:100%;margin:0 auto} figure.wp-block-video.aligncenter{ width:100%; max-width:min(var(--dr5-max, 1920px), 98vw); margin:0 auto; } #subtitleOverlay{ display: none; } .dr5-sublist details > p{ height:200px; overflow:auto; background-color:#EDF7FF; padding:2px 6px; margin:0; box-shadow:3px 3px 4px black; position: relative; } .dr5-sublist details > summary{ padding:2px 6px; width:100%; background-color:#ddd; border:none; box-shadow:3px 3px 4px black; cursor:pointer; list-style:none; } .imk-line { display: inline-block; width: 100%; border-radius: 2px; transition: background-color 0.1s; } '; echo '(この動画の高画質版は準備中です)
'; } echo '' . nl2br(get_custom_data($explain_line_url)) . '
'; echo '動画はまだ準備中です。
'; } } else { echo 'JSONデータの取得に失敗しました。
'; } } else { echo 'dridが指定されていません。
'; } if (have_posts()) : while (have_posts()) : the_post(); the_content(); endwhile; endif; get_footer(); ?> ``` dr6.php ``` :root{ --dr6-max: 1920px; } .radio-label{margin-right:10px;font-size:16px;color:#0073aa;text-decoration:underline} .radio-label.selected{font-weight:bold;color:#000;text-decoration:none;cursor:default} .video-wrap{position:relative;width:100%;margin:0 auto} figure.wp-block-video.aligncenter{ width:100%; max-width:min(var(--dr6-max, 1920px), 98vw); margin:0 auto; } #subtitleOverlay{ display: none; } .dr6-sublist details > p{ height:200px; overflow:auto; background-color:#EDF7FF; padding:2px 6px; margin:0; box-shadow:3px 3px 4px black; position: relative; } .dr6-sublist details > summary{ padding:2px 6px; width:100%; background-color:#ddd; border:none; box-shadow:3px 3px 4px black; cursor:pointer; list-style:none; } .imk-line { display: inline-block; width: 100%; border-radius: 2px; transition: background-color 0.1s; } '; echo '(この動画の低画質版は準備中です)
'; } echo '' . nl2br(get_custom_data($explain_line_url)) . '
'; echo '動画はまだ準備中です。
'; } } else { echo 'JSONデータの取得に失敗しました。
'; } } else { echo 'dridが指定されていません。
'; } if (have_posts()) : while (have_posts()) : the_post(); the_content(); endwhile; endif; get_footer(); ?> ``` ds5.php ``` :root{ /* 必要ならテーマ側から上書き可 */ --ds5-max: 1920px; } .radio-label{margin-right:10px;font-size:16px;color:#0073aa;text-decoration:underline} .radio-label.selected{font-weight:bold;color:#000;text-decoration:none;cursor:default} /* 動画と枠外字幕を同じ幅で束ねる外枠 */ .ds5-shell{ width: 100%; max-width: min(var(--ds5-max, 1920px), 98vw); margin: 0 auto; } /* Gutenberg の既定 max-width 影響を受ける場合に備え、figure 自体も同じ制約で中央寄せ */ figure.wp-block-video.aligncenter{ width: 100%; max-width: min(var(--ds5-max, 1920px), 98vw); margin: 0 auto; } /* video は常にコンテナ幅いっぱい */ #myVideo{ width:100%; height:auto; display:block; } /* 枠外字幕(動画の外=下に出す) */ #subtitleData{ color: blue; /* ご要望の青 */ margin-top: 8px; line-height: 1.4; white-space: pre-wrap; font-size: clamp(16px, 2.0vw, 22px); } #subtitleData .ext-subcue{ margin: 2px 0; } /* 小さい画面は少し字を大きめに */ @media (max-width: 430px){ #subtitleData{ font-size: clamp(16px, 4.2vw, 22px); } } '; // ===== UI(切替リンク)===== echo '動画はまだ準備中です。
'; } } else { echo 'JSONデータの取得に失敗しました。
'; } } else { echo 'dridが指定されていません。
'; } // 固定ページ本文 if (have_posts()) : while (have_posts()) : the_post(); the_content(); endwhile; endif; get_footer(); ?> ``` ds6.php ``` :root{ --ds6-max: 1920px; /* テーマ側で上書き可能 */ } .radio-label{margin-right:10px;font-size:16px;color:#0073aa;text-decoration:underline} .radio-label.selected{font-weight:bold;color:#000;text-decoration:none;cursor:default} /* コンテンツ枠:動画も字幕もこの幅に揃える */ .ds6-shell{ width: 100%; max-width: min(var(--ds6-max, 1920px), 98vw); margin: 0 auto; } /* Gutenberg 既定の figure 幅制限が強い環境でも同じ挙動に */ figure.wp-block-video.aligncenter{ width: 100%; max-width: min(var(--ds6-max, 1920px), 98vw); margin: 0 auto; } /* video は常にコンテナ幅いっぱい */ #myVideo{ width:100%; height:auto; display:block; } /* 枠外字幕(青) */ #subtitleData{ color: blue; margin-top: 8px; line-height: 1.4; white-space: pre-wrap; font-size: clamp(16px, 2.0vw, 22px); } #subtitleData .ext-subcue{ margin: 2px 0; } /* スマホ縦は少し大きめ */ @media (max-width: 430px){ #subtitleData{ font-size: clamp(16px, 4.2vw, 22px); } } '; // ===== 切替リンク ===== echo '(この動画の低画質版は準備中です)
'; } echo 'No data found for drid: ' . esc_html($drid) . '
'; } } else { echo 'Failed to retrieve JSON data.
'; } } else { echo 'No id provided.
'; } // 固定ページ本文 if (have_posts()) : while (have_posts()) : the_post(); the_content(); endwhile; endif; get_footer(); ?> ```