カスタムフィールドの値を 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で戻します。

<?php
// カスタムフィールド 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 は、表示の優先順位なのですが、これは仕様変更(表示順制御機能を追加したりした場合)で変更される可能性がないとは言えません。変更があると外すフィルターが効かなくなるので、受託案件で使用するとそういったリスクが無いとは言えません。

フィルターを外した状態で直接入力する

PHPが本当によくわからないという場合は下記の方がやりやすいと思います。

改変したい子テーマのテンプレートファイルの

<?php the_content();?>

の部分を下記に書きかえてください。

<?php
// シェアボタンのフィルターを一旦外す
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' );
// CTAのフィルターを一旦外す
remove_filter( 'the_content', array( 'Vk_Call_To_Action', 'content_filter' ), 100 );
// 著者情報のフィルターを一旦外す
remove_filter( 'the_content', 'pad_add_author' );
?>

<?php the_content();?>

★ ★ ★ ★ ★ 
ここにカスタムフィールドなど 独自に書いてください。
★ ★ ★ ★ 

<?php
if ( function_exists( 'veu_get_related_posts_html' ) ){
	echo veu_get_related_posts_html();
}
if ( function_exists( 'veu_get_follow_html' ) ){
	echo veu_get_follow_html();
}
if ( class_exists( 'Vk_Call_To_Action' ) ) {
	echo Vk_Call_To_Action::render_cta_content( Vk_Call_To_Action::is_cta_id() );
}
if ( function_exists( 'veu_get_sns_btns' ) ){
	echo veu_get_sns_btns();
}
if ( class_exists( 'Vk_Post_Author_Box' ) ) {
	echo Vk_Post_Author_Box::pad_get_author_box();
}
?>


<?php
// 再びシェアボタンのフィルター処理を追加する
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' );
// 再びCTAのフィルター処理を追加する
add_filter( 'the_content', array( 'Vk_Call_To_Action', 'content_filter' ), 100 );
?>

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

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

Lightning Advent Calender 2018