• 解決済 hiyoro

    (@hiyoro)


    シングルページテンプレート上にて”echo get_the_content();”と記述し、ブロックエディター上で「ギャラリー」ブロックを配置すると正常に表示されません。(本来は画像の枚数に合わせて2~3列に振り分けて表示されますが、縦1列に表示されます)

    テンプレート上の記述が”the_content();”であれば正しく表示されます。

    get_the_content() によってブロックエディターの内容を表示しようとすると、ギャラリーブロック側に本来必要なはずの「.is-layout-flex」等のclassがいくつか記述されなくなるようです。

    • このトピックは3週、 1日前にhiyoroが編集しました。理由: 補足説明を追記
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 公式ドキュメントに記載されている通り、echo get_the_content(); の場合はフィルターフックを通らないですね。

    https://developer.wordpress.org/reference/functions/get_the_content/

    なので、echo get_the_content();the_content(); とで、結果が異なることはあり得ると思われます。

    • この返信は2週、 6日前に水野史土が編集しました。理由: リンク修正
    トピック投稿者 hiyoro

    (@hiyoro)

    @ounziw
    ありがとうございます!

    the_content()との重要な違いは、 get_the_content()はコンテンツをthe_contentフィルターに通さないことです。つまり、 get_the_content()はビデオを自動的に埋め込んだり、ショートコードを展開したりしません。

    との記載を確認しました。

    今回質問したギャラリーブロックの整形部分が、the_contentフィルターに含まれる、という理解をしました。

    おそらく、.is-layout-flex CSS クラスの付与等も含め、実際にページにレンダリングされる最終的なHTMLを生成するために、コアにおいて the_content をフックして、do_blocks 関数を実行しています。

    https://github.com/WordPress/wordpress-develop/blob/84332c97af7633bb7144dfb2447c817882e1dd30/src/wp-includes/default-filters.php#L192

    なので、get_the_content() でも同じようにレンダリングされた結果のHTMLを取得したい場合は、do_blocks でラップしてあげればよいと思います。

    $content = do_blocks( get_the_content() );

    do_blocks の有無で、生成されるHTMLがどのように異なるのか、ぜひデバッグしてみてください。

    もしショートコードも展開したければ、do_shortcode を通すとよいはずです。

    トピック投稿者 hiyoro

    (@hiyoro)

    @wildworks ありがとうございます!

    実装に困っていたわけではないのですが、「これはバグなのでは・・・?」と思ってトピックを投稿してしまいました。

    結果、バグではなく仕様ということですが、補足いただいた内容も含めて私にとって良い学びとなりました。改めてありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。