WordPressをいじってる中で、ちょこちょこ出てくるのが、カテゴリごとにヘッダのテキストや画像を追加したいという要望。
通常のヘッダはそのままで、カテゴリ毎にちょっとしたテキストを入れたい場合はテンプレートを複製して、category-1.phpとかカテゴリIDを付けて対応する場合もあるし、画像だけだったらcssで画像のidを取得して振分ける方法もあるのだけど、今回は複数のカテゴリがあって、更にテキストも入れたい。ループの下に更に別のテキストも入れたい。
そして、実際に運用するのがクライアントだということもあって、汎用性を考えてAdvanced Custom Fieldsで対応します。
Advanced Custom Fieldsは前にもちょこっと書いたけど、カスタムフィールドをセットごとに作ることができて、更にそれをどこに使うかの指定ができるスグレモノのプラグインで、ここしばらくはほとんどのクライアントで使用しています。
最近は日本語にも対応してま~便利。ここまでくれば有料になってもお金払っちゃいます。

で、更に今回はカテゴリごとに対応させたいので、こんなかんじに名前をつけて、セットを作成します。
で、「位置」→「ルール」でカスタムフィールドを表示させる場所を指定します。「分類(追加・編集)」「カテゴリー」を選択すればこのカスタムフィールドのセットが投稿のカテゴリの部分に表示されるようになります。
テキストはテキストエリアを選ぶとhtmlも使えるので便利。
次は実際にカテゴリで値を入力。
カテゴリーの編集画面を見ると、ちゃんと下にカスタムフィールドが表示されてます。
これができると、ちょっとカテゴリを追加した場合も簡単にテキストや画像がここで設定できるので、テンプレートをいちいちいじらなくてOK。
で、最後は各フィールドを実際にテンプレートで呼び出す準備。
category.phpか、archive.phpにを編集。
このプラグインで呼び出す場合は
<?php the_field('フィールド名'); ?>
で値を取得できるのだけど、ループ外で呼び出す場合は、カテゴリのIDを取得しないと表示されませんでした。
なので、
<?php
$cat_id = get_queried_object()->cat_ID;
$post_id = 'category_'.$cat_id;
?>
<?php the_field('フィールド名',$post_id); ?>
こんなかんじにすればバッチリと表示されました。
というか、この覚書はこの部分を取っておきたかっただけ、、
これで、不要なテンプレートを量産しなくてすみます。
2016.3.9 追記:
画像のパスなどをACFで指定している場合、画像がないときに「?」となってしまいます。
そんな場合は下記のようにその値が入っている場合のみ表示するようにすれば解決できます(^^)
<?php if( get_field('image') ): ?><img src="<?php the_field('image'); ?>"><?php endif; ?>







もう空はすっかり秋になっていました。
激しく共食いしてましたが、4匹生存中。