質問: http://movie.abc-cooking.co.jp/ このサイトのトップページのように、各投稿ページの動画を呼び出しながら、トップページでそのまま再生ができるような挙動を実現したいです。
回答: 追加情報への補足ありがとうございます。 1 つの案として、私から提案させていただきます。 あまり知られていない WordPress の便利機能の 1 つとして、投稿フォーマットというものがあります。これは、WordPress のデフォルトテーマなら必ず対応しています。 投稿フォーマットは video にも対応しているので、これを利用するのがよいと思います。投稿フォーマットへの対応は凄く簡単です。after_setup_theme アクションにフックしている関数内で add_theme_support() 関数を使います。テーマファイルの作り方は通常の投稿や固定ページと全く一緒です。 WordPress のデフォルトテーマ Twenty Sixteen の functions.php の一部を以下に示します。 ``` if ( ! function_exists( 'twentysixteen_setup' ) ) : /** * Sets up theme defaults and registers support for various WordPress features. * * Note that this function is hooked into the after_setup_theme hook, which * runs before the init hook. The init hook is too late for some features, such * as indicating support for post thumbnails. * * Create your own twentysixteen_setup() function to override in a child theme. * * @since Twenty Sixteen 1.0 */ function twentysixteen_setup() { /* * Enable support for Post Formats. * * See: https://codex.wordpress.org/Post_Formats */ add_theme_support( 'post-formats', array( 'aside', 'image', 'video', 'quote', 'link', 'gallery', 'status', 'audio', 'chat', ) ); } endif; // twentysixteen_setup add_action( 'after_setup_theme', 'twentysixteen_setup' ); ``` 次にテーマファイルの作り方ですが、テーマファイルのループ部分はだいたい content.php などとして、single.php から呼び出します。その時に、content-video.php などを作成し以下のようにして、ループ内で呼び出します。 ``` /* * Include the post format-specific template for the content. If you want to * use this in a child theme, then include a file called called content-___.php * (where ___ is the post format) and that will be used instead. */ get_template_part( 'content', get_post_format() ); ``` こうすることで、content-video.php が読み込まれるようになります。投稿フォーマットを指定していない場合は、content.php が呼び出されます。これを利用することで、比較的簡単に実装できると思います。 content-video.php の作り方としては、投稿本文に YouTube のビデオページの URL がある場合、それを 1 つ取り出し、`do_shortcode( '[embed]http://www.youtube.com/watch?v=xxxxxxxxxxx[/embed]');` のようにして、ビデオを表示。YouTube のビデオページの URL がない場合は、アイキャッチを表示、それもない場合は、No image 画像を表示するなどの処理をすればよいかと思います。