ブログ

【WordPress】ACFから出力される値をthe_content内に含めて出力する方法

デフォルトではカスタムフィールドの値は投稿本文として出力するthe_content();とは切り離されて出力されます。

カスタムフィールドの値を、the_content();内に含めて出力しなければならない事はほとんどありませんが、ごく稀に必要になる事があります。

カスタムフィールドの値を投稿本文に含める必要があるケースとは?

ズバリ会員制サイトを作成する時です。この他にも、WordPress標準機能のパスワード保護で記事を保護したい場合などに、必要になるケースがあります。

WordPress標準のパスワード保護や会員制サイトプラグインで保護される記事の内容は、the_content();で出力される範囲となります。つまり、デフォでthe_content();と切り離されて出力されるカスタムフィールドの値は、保護されずにそのまま公開されてしまいます。

この他、投稿本文の文章とカスタムフィールドの値を組み合わせて使いたい場合などがあります。

単にカスタムフィールド部分を保護したい場合

カスタムフィールドの値をthe_content();などに含めず、単にパスワード保護したい場合は下記のコードで実現可能です。

<?php if( !post_password_required( $post->ID ) ) : ?>
//パスワード不要またはパスワードが正しい時に出力する内容
    <?php the_field('sample_field'); ?>
<?php else: ?> 
//パスワード必要またはパスワードが間違っている時に出力する内容
     <?php echo get_the_password_form(); ?> //パスワード入力フォーム
<?php endif; ?>

上記の通り、パスワードで保護したいカスタムフィールドを<?php if( !post_password_required( $post->ID ) ) : ?><?php else: ?>の間に入れるようにします。

カスタムフィールドの値をthe_content();に含める方法

1・ショートコード化する

functions.phpに下記のコードを追記します。下記例はカスタムフィールド名が「sample_field」の場合です。

function inpostCf() {
    $field = get_post_meta(get_the_ID(), 'sample_field', true);
    return $field;
}
add_shortcode('viewsample', 'inpostCf');
<!--エディタ内で下記を記述-->
[viewsample]

//記述例
<p>本日の天気は「[viewsample]」です。</p>

カスタムフィールドに入力した値が「晴れ」の場合は、ショートコード[viewsample]に「晴れ」と出力され、本文とカスタムフィールドを合体させて出力させる事が可能となります。

まぁ…この様な要件の実装はほとんどありませんが…

出力部分をファイル化してショートコードでthe_content();に読み込む

上記の応用です。

カスタムフィールドによる出力部分を別ファイル化した上で、ショートコード化してthe_content();に含めます。

使い所としては、不動産サイトの物件の様にカスタムフィールドで大量のデータを入力して出力させるといったコンテンツをthe_content();に含めたい場合に有効です。ただし、ここまでのデータをわざわざthe_content();に含めて出力させる意味はあまりないかもしれません。

テンプレートファイルでは無く、エディタにHTMLを書いてレイアウトしてるので、その中に物件情報を出力したいって場合に有効です。もちろん、the_content();による出力になるので、<?php if( !post_password_required( $post->ID ) ) : ?>による分岐を使うことなく、パスワード保護の対象になります。

function my_php_Include($params = array()) {
extract(shortcode_atts(array('file' => 'default'), $params));
ob_start();
include(STYLESHEETPATH . "/inc/$file.php");
return ob_get_clean();
}
add_shortcode('myphp1', 'my_php_Include');

上記は子テーマの「inc」ディレクトリにあるファイルを読み込む場合です。親テーマ内を参照する場合はコード4行目のSTYLESHEETPATHget_theme_root()などに差し替えてください。

<!--出力例-->
<section>
<h1>見出し</h1>
<article>
<p>テキストテキストテキストテキストテキストテキストテキストテキスト</p>
<div class="bukken_block">
[myphp1 file='bukken_field']
</div>
</article>
</section>

この記事を書いた人管理人

SAKURAGRAPHICA代表
会社員の傍ら、フリーランスでWEBサイトの制作やWordPressによるCMSの構築・障がい者の就労支援としてホームページ制作の指導を行っております。

SAKURAGRAPHICAができること

最近の記事 おすすめ記事
PAGE TOP