WordPressのブロックエディターでは、YouTubeのURLを貼り付けるだけで、簡単に埋め込みができるようになりました。
ところが、一部の環境で、編集画面では正しく埋め込み再生されるのに、公開して表示すると、ただのURLになってしまうケースがありました。
↓ こんな感じです
https://youtu.be/-Jf7Nu9aGqA
原因を調べて、修正できましたので、メモとして投稿します。
URLを埋め込みとして表示するには the_content()でなければならない
参考にさせていただいたのは、次の記事です。
WordPress への YouTube 動画の埋め込み(が上手く反映されないのでまいっている)が,解決した。
WordPress の Gutenberg(グーテンベルク)では,YouTube の URL を入力するだけで…
Youtubeの埋め込みを、埋め込みとして表示するには、single.phpなどの中の記述を
echo get_the_content();
ではだめで
the_content();
にする必要がある、ということでした。
クラシックエディターの改行を<br>に変換しているケースがややこしい
ここで、別の問題につきあたりました。
クラシックエディターで作成した過去のブログ投稿では、記事内の改行が改行として表示されないケースがあったため、nl2brを使って次のように書いてあったのです。
echo nl2br(get_the_content());
Youtubeの埋め込みのため、今後はブロックエディターに切り替えて記事を作成していくわけですが
単純に the_content(); に置き換えてしまうと、クラシックエディター時代の記事の表示が損なわれてしまいます。
はてどうする。再び調べました。
記事ごとにブロックエディタかクラシックエディタか判定する
記事ごとに、ブロックエディターか、クラシックエディターか判定する方法がありました。
use_block_editor_for_post
bool use_block_editor_for_post( int | WP_Post $post ) 投稿がブロックエディターに対応しているか調べる。
この関数を使って、ブロックエディター以前と以後で振り分けを書くことができました。
if (have_posts()) : while (have_posts()) : the_post();
$post_id = get_the_ID();
if (use_block_editor_for_post($post_id)){
the_content();
} else {
echo nl2br(get_the_content());
}
endwhile; endif;
無事解決です。以前の記事の見た目を変えることなく、新しい記事だけ、YouTube埋め込み対応にすることができました。
コメント