テーマ【Emanon Free】にカスタムフィールドを出力するための対応を進めていきます。
無料のテーマに編集をするので、自己責任でお願いします。基本的には新規ファイルを用意しますが、一部既存のphpファイルに手を加えています。
まずはphpの準備。投稿ページ用のphpを用意していきます。

投稿ページ用のphpを用意する

①single-{post_type}.php

通常投稿ページの single.php を複製して、カスタム投稿のpost typeをルールにのっとって追記した single-{post_type}.php を用意する。
※post typeで判断して、通常の投稿ページと分けることができる

こちらは用意するだけで表示分けはされます。とはいえ、カスタム用のPHPであることが判別できるように、念のためコメントを記載して、正しく読み込まれているように確認できるようにしました。

しかし、【Emanon Free】の single.php には、投稿ページに表示されている本文のソースコードが記載されていません。もちろん、投稿・固定ページの本文を出力する関数「the_content」の記述がないのです。
ヘッダー部、フッター部の読み込み記述と投稿ページレイアウトの表示判定に関する記述だけが記載されています。

つまり post_typeで判断して表示分けをするために single-{post_type}.php は必要。
しかし、カスタムフィールドの内容が表示されるようにソースを追記をするのはこのファイルではない、ということです。

②content-{post_type}.php

single.phpに「the_content」がないなら、どこに記述があるんじゃ?ということで調べました。
ファイル名をざっと見て、このあたりかなー?と各ファイル内の記述を確認。そして content.php 内に記述があることを発見しました。

そのファイルの付近を見ると「content-page.php」「content-search.php」というファイルも発見。

ということは、この content.php も特定のpost_typeに対応した別ファイルを設定することが可能なのではないか?と思い、こちらも複製からのアップ。
こちらは-{post_type}である必要はないかもしれませんが、わかりやすいように設定しました。

最終的にはこの複製したphpの記述を調整して、カスタムフィールド内の記述を表示させる必要があります。
簡易的に、うまくったらカスタムフィールドに登録した内容が表示されるように記述を行いつつ、同時にphp自体に【testtest】というダミーテキストを直書きします。何のためかというと、このphpが正しく読み込まれていることをすぐにわかるようにするためです。
php自体をわけているので、通常投稿ページへの影響は避けることができているので一安心。

と、ここまで準備をして、カスタム投稿に登録しているテスト記事を一旦プレビュー表示しました。
①と②の関連付けをしていないので、まぁ無理でしょと思いましたが…無理でした。
ですよねー。
この時点で確認できたのは①は正しく読み込まれている(コメントで確認)。
②は全く読み込まれていない(本文は出ないし、ダミーテストも表示されない)。

ここで一度、Advanced Custom Fieldsに戻って、一旦非表示にしていたコンテンツエディタを表示するように修正。テスト記事の本文枠にもダミーテキストを入れました。
これが入っていないとタイトルしか表示されないので、そもそもテスト記事の読み込みがちゃんとされているの?と疑心暗鬼になったので。
※再度項目を非表示にするときは、本文枠に入力したダミーテキストも削除するのをお忘れなく

③right-sidebar-single.php の変更

①と②の関連付けを行うために、①のソースコードを改めて確認します。
投稿ページレイアウトの表示判定に関する記述の箇所が実際に表示しているphpを読み込んでいる箇所であることは間違いない。

テーマ【Emanon Free】は、一つのテーマで3パターンのレイアウトに対応していたり、同じパターンの中でもサイドバーの有(左右)・無が選べたりと拡張性がとっても高い、素敵なテーマです。
それゆえに、紛らわしいやつらがいます。
例)templates/right-sidebar.php

自分で組んでいるわけでもなく、階層理解とか全然しないまま過ごしてきたので、結構大混乱でした。
冷静に記述を見ると、しっかりと答えが書いてありました。

blog-templates/single/right-sidebar-single

記述の通り階層をたどることができるので、焦らずに●●-sidebar-single.phpを探しましょう。
私の場合は右にサイドバーを出しているので、まずはこちらのみに準備しました。

②content-{post_type}.phpを読み込んでいるのはここ。
▼デフォルトの記述

<!--main-->
 <main>
 <div class="col-main first">
 <?php get_template_part( 'content', get_post_format() ); ?>
 </div>
 </main>
 <!--end main-->

▼ここを分岐させました。

<!--main-->
  <main>
 <div class="col-main first">
<?php if (get_post_type() == 'trip_log') {
 get_template_part( 'content', 'trip_log' );
 } else {
 get_template_part( 'content', get_post_format() );
 } ?>
 </div>
 </main>
 <!--end main-->

これでOK。

<?php get_template_part( 'content', get_post_format() ); ?>

『get_template_part()』は引数に指定したテンプレートをインクルードしてくれる関数。
ここを2重で書けば行けるんじゃ?と思って試しましたが、それはダメでした。ちゃんとif文で出し分けをしなさい、と。。。

世知辛いぜ…。

最終的には、固有のpost_typeだけではなく、新しいpost_typeを設定したら自動的にpost_typeを取得してきて、それぞれに適応している①と②を関連付けてくれる記述での用意となりました。

 <!--main-->
 <main>
 <div class="col-main first">
 <?php $post_format = (get_post_type( get_the_ID() ) === 'post') ? '' : get_post_type( get_the_ID() ); ?> 
 <?php get_template_part( 'content', $post_format); ?> 
 </div>
 </main>
 <!--end main-->
(素敵なエンジニアに知恵をお借りしました)

この③の対応をしながら随時テスト記事のプレビュー確認を行いました。

そして無事に表示確認!

【testtest】というダミーテキストが表示されましたー。
そして簡易的に記述しておいた、カスタムフィールドに登録をした画像も無事に表示。
これで最低限のphpを用意するという点が完了しました。

振り返り

①single-{post_type}.php
→新規で作成。③を既存ファイルの修正で進める場合(今回はコレ)は、single.phpを複製してUPするだけでOK。

②content-{post_type}.php
→新規で作成。内部の記述でカスタムフィールドの内容を取得して、出力するように記述を行う。この点は次回。

③right-sidebar-single.php の変更
→既存のphpを変更。詳細は上記参照。
今回は新規phpを用意せずに、post_typeを判定して表示分けするように修正する方法を取りましたが、新規phpを用意して、読み込むcontent-{post_type}.phpを指定、①で読み込むファイル名を変更するという手段でも対応可能かと思います。
ただし、その場合は●●-sidebar-single.phpをすべて用意する方が良いと思います。
別名ファイルにした方が、テーマの更新をどうしてもしないといけないときなどは、子テーマ扱いになると思うので、被害は少なくて済むかもしれません。
…が、ファイルをわける(ファイルを増やす)ことには、相応のリスクが生じることもありますので、そのあたりは自己判断が必要になってくるてんだと思います。

次回は

ついに、カスタムフィールドの出力についてです!
引き続き、模索を頑張りますー。


スポンサーリンク