WordPressのEmbedがいまいち使いづらかったので調整(メモ)

知らなかったんですけど、Embed出力に対応しているサイトのURLを貼ると自動的にカードで表示されるんですね



例えばこんな感じ

URLを記述すると、


https://nplll.com/2022/01/upgrade-to-windows11/


自動的に変換されてこんな感じで表示されます。


Windows 11 にアップグレードしてみたら思いのほか簡単だった



Embedの不具合

ところがこの仕組みがなぜかうちのブログでは上手く動かなくて、次のような問題がありました。

  • <!--more--> タグを無視して本文が全部表示されてしまう

これさえなかったら便利に使えるんですけどねえ……というわけで調整。



カスタマイズの基本

embed周りのファイルはWordPressの以下の場所にあります。


wordpress/wp-includes/theme-compat


このうち、以下のファイルをテーマフォルダに置けばカスタマイズして上書きできます。


  • embed-404.php
  • embed-content.php
  • embed.php
  • footer-embed.php
  • header-embed.php


が、今回はそこまでデザインを変えないのでこの必要はありません。the_excerpt_embed() を差し替えれば終わりです。



テーマフォルダ/functions.php に以下を追加

add_filter('the_excerpt_embed',function() {
   $post = get_post();
   echo array_shift(explode('<!--more-->', $post->post_content));
   echo '

続きを読む

'; });


<!–more–>で分割する部分は、本当はちゃんとした関数があります。


投稿本文を で区切った内容を各々取得します。戻り値は main と extend のキーからなる連想配列です。main キーの配列には より前の本文、extend キーの配列には より後の本文が入っています。

関数リファレンス/get extended – WordPress Codex 日本語版


しかしこれもなぜかうちの環境では上手く動かなくて、<!–more–>2個以上セットしないと分けてくれませんでした。なぜだ。というわけでわざわざ実装してます。



なんかいろいろ上手く動かないことあるんですけど何がダメなのかなあ。WordPressの本はたくさんあるけど、デザインとかそういうのばっかりで中身をがっつり解説した本ってのはないのね。いや本じゃなくてドキュメントでも良いんだけどいまいちわかりにくいんですよねー

こういうの読めば良いのかな