2018年06月08日
WordPressで「関連記事」を構築したければ『Advanced Custom Fields』の「関連」がオススメ
WordPressでブログサイトを構築するにあたり、singleページ末尾の「関連記事(あわせて読みたい記事)」をどのように出力するかは悩みどころだ。
筆者はこれまで、自作のコードで構築したり、『Yet Another Related Posts Plugin(YARPP)』などのプラグインに頼ったりしたが、意外なところにたどり着いた。それが『Advanced Custom Fields』の「関連」だ。
『Advanced Custom Fields』といえばカスタムフィールド系プラグインの王道ではあるが、「関連記事」まで構築できるとは恐れ入った。
1記事1記事手動で関連記事を選ばなくてはならず多少手間ではあるが(つまり自動選定ではない)、精度は高まるのでそのほうが良いだろう。おすすめだ。
『Advanced Custom Fields』の「関連」で関連記事を出力する
ACF側の設定
『Advanced Custom Fields』のインストール方法や、基本的な使い方は割愛する。
以下の画像のように、まずは設定を終えよう。
「返り値のフォーマット」を「投稿オブジェクト」にすることだけが注意点。
編集画面に「関連記事」が表示される
設定が終われば、WordPress管理画面の投稿編集画面に、下の画像のような「関連記事」が用意されただろう。
ちなみに、選択するエリアの高さが低いため、少々選びづらい。
もう少し高くしたい方は、『Advanced Custom Fields』のcssファイルを編集しよう。
「../plugins/advanced-custom-fields-pro/assets/css/acf-input.css」のcssファイルが編集対象。
※筆者はpro版を利用しているので上記パスとなっています。
998行目の
.acf-relationship .list {
margin: 0;
padding: 5px;
height: 160px;
overflow: auto;
}
のheightを480pxくらいに変更してあげよう。
このように選びやすくなる。
phpファイルにて出力
さて、肝心の出力方法。
対象のphpファイル(一般的にはsingle.php)の任意の場所に、以下のように記述しよう。
細かいマークアップは自由にしていただいて構わない。
<div class="related-area">
<h3>関連記事</h3>
<div class="related-wrapper">
<?php $acfrelated = get_field('acf_related'); ?>
<?php if($acfrelated): ?>
<?php foreach((array)$acfrelated as $value):?>
<div class="one-related">
<div class="eyecatch">
<a title="<?php echo $value->post_title; ?>" href="<?php echo get_the_permalink($value->ID); ?>">
<?php echo get_the_post_thumbnail( $value->ID,'thumbnail' ); ?>
</a>
</div>
<div class="entry-wrapper">
<div class="entry-title">
<a title="<?php echo $value->post_title; ?>" href="<?php echo get_the_permalink($value->ID); ?>">
<?php echo $value->post_title; ?>
</a>
</div>
<div class="entry-meta">
<span class="entry-date"><?php echo get_post_time('Y年m月d日','', $value->ID); ?></span>
<span class="entry-category"><?php the_category('','',$value->ID);?></span>
<?php echo get_the_term_list($value->ID, 'xxxxxxxxxx', '<span class="entry-taxonomy">', ', ', '</span>');?><!-- この行はカスタム分類がある場合のみ -->
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
※4行目の「acf_related」は、ACF側で設定したカスタムフィールド名。
※23行目は、カスタム分類を利用していて、関連記事内で出力したい場合に記述する。「xxxxxxxxxx」がタクソノミースラッグ。
以上で、関連記事が出力されたはずだ。
正しく出力さない場合は、23行目を削除していただきたい。