Table of Contents Plus (TOC+) で目次が表示されない。。。どうして。。。あ!ACF使ってるからかも!

目次プラグインのTable of Contents Plusをインストールしたのだけど、目次が表示されない!設定でコンテンツタイプの自動挿入や表示条件、見出しレベルなどのチェックは確認済み。。。表示されないのどうして。。。

表示されないのはACFのカスタムフィールドの見出しだった

さて、どうやらACFの柔軟コンテンツで見出しブロックとかの部分が目次に反映されないのが判明した。通常のwordpressの入力欄に入力されたものはthe_content()で出力されて、その中の<h>タグの見出しは目次に反映される。
目次プラグインTable of Contents Plusはthe_content()の中身を見て目次を作ってるんだね。
そういえばACFのカスタムフィールド見出しはthe_content()で出力してなかったわ。

the_content()にカスタムフィールド内容をプラスする

柔軟コンテンツのカスタムフィールドの出力内容を変数に代入してフィルターフックでthe_content()にプラスしてあげれば、目次プラグインにもACFの柔軟コンテンツで見出しが渡せる。

解決

出力バッファリング
ob_start();
を開始して
ob_get_clean();
で出力バッファの内容を変数に格納し、バッファをクリア。
add_filter( ‘the_content’, ‘add_custom_text_to_specific_posts’ );
フィルターフックでthe_content()にプラスする。

ACFの出力をthe_content()に追加する例

ob_start();

//ACFの柔軟コンテンツの出力
ACF柔軟コンテンツのカスタムフィールドの出力1;
ACF柔軟コンテンツのカスタムフィールドの出力2;
ACF柔軟コンテンツのカスタムフィールドの出力3;

$article_content = ob_get_clean();

//フィルターフックでthe_content()内容にプラスする
function add_custom_text_to_specific_posts( $content ) {
    global $article_content;
    $content .= $article_content;
    return $content;
}
add_filter( 'the_content', 'add_custom_text_to_specific_posts' );

the_content();

投稿のみの場合はpostで条件分岐します。

if ( is_single() && get_post_type() == 'post' ) {
    $content .= $article_content;
}

まとめ

Table of Contents Plus (TOC+) で目次が表示されないという問題は、the_content()に含まれていない見出しの場合もあるということでした。ACFのカスタムフィールドで見出し作ってたりとか。
Table of Contents Plus以外の他の目次プラグインも
Easy Table of Contents
Rich Table of Contents
SimpleTOC – 目次ブロック
Table Of Contents Block
TOP Table Of Contents
など「TOC」で検索して出てくるプラグインはthe_content()を見ているっぽかったです。

しかし、フィルターフックでthe_content()に追加してあげれば良いのでした。

コメント

タイトルとURLをコピーしました