カスタムフィールドの値を the_content フィルターに通した時にシェアボタンなどが表示されないようにする

この記事は「WordPress Theme Lightning Advent Calendar 2018」の12月6日の記事になります。

ExUnit(VK All in One Expansion Unit)ではシェアボタンや関連記事など表示するのに the_content フィルターフックを通して追加しています。

その都合上、カスタムフィールドの値に対して、本文エリアと同じ振る舞いをさせるために the_content フィルターを通すと、シェアボタンなども一緒に表示されてしまいます。

これを回避するには先に remove_filter でフックを外して、その上で カスタムフィールドの値を the_content フィルターを通して表示した後で、再び add_filterで戻します。

// カスタムフィールド sample_field の値を取得
$custom_field_value = $post->sample_field;

// シェアボタンのフィルターを一旦外す
remove_filter( 'the_content', 'veu_add_sns_btns', 200, 1 );
// 関連記事のフィルターを一旦外す
remove_filter( 'the_content', 'veu_add_related_posts_html', 800, 1 );
// FollowMeのフィルターを一旦外す
remove_filter( 'the_content', 'veu_add_follow' );
// 著者情報のフィルターを一旦外す
remove_filter( 'the_content', 'pad_add_author' );

// カスタムフィールドの値を the_contents フィルターを通して表示
echo apply_filters( 'the_content', $custom_field_value );

// 再びシェアボタンのフィルター処理を追加する
add_filter( 'the_content', 'veu_add_sns_btns', 200, 1 );
// 再び関連記事のフィルター処理を追加する
add_filter( 'the_content', 'veu_add_related_posts_html', 800, 1 );
// 再びFollowMeのフィルター処理を追加する
add_filter( 'the_content', 'veu_add_follow' );
// 再び著者情報のフィルター処理を追加する
add_filter( 'the_content', 'pad_add_author' );

ただ…

関連記事の 800 や シェアボタンの 200 は、表示の優先順位なのですが、これは仕様変更(表示順制御機能を追加したりした場合)で変更される可能性がないとは言えません。変更があると外すフィルターが効かなくなるので、受託案件で使用するとそういったリスクが無いとは言えません。

Lightning Advent Calendar にご参加ください!

Lightningの良い所、悪いところ、制作事例をブログで紹介してアフィリエイトリンクを記事に貼っちゃってください!

Lightning Advent Calender 2018