wordpressの関連記事表示用プラグイン「Contextual Related Posts」。
プラグインの設定画面で、ある程度表示をカスタマイズできるが、フルカスタマイズする方法がある。
'crp_custom_template' フィルタを利用すればよい。
↓これをfunction.php に書く。
//ブログ記事の関連情報 カスタムテンプレート設定(プラグイン用) function __crp_custom_template($dmy=null, $posts=[], $args=[]){ //$ret = ''; $ret = ' '; //●空の場合、filterの後、抜けずにプラグインのdefaultの処理に進んでしまうため、空白とする(2020.1) if ( $posts ) { $i = 0; foreach ($posts as $_post) { $obj = get_post( $_post->ID ); //記事を取得する //色々加工する $ret .= '<div class="hogehoge">' . $obj->post_title . '</div>'; $i++; if ($i >= 3) { //3記事で終わる break; } } } return $ret; } add_filter( 'crp_custom_template', '__crp_custom_template', 10, 3 );
パラメタの $posts には、IDと日付だったか、を持つpostオブジェクトが入っている。
$args には、プラグインの設定値が入っているので、必要に応じて使うことができる。
フィルタの適用箇所は、プラグインのソースの以下にある。
/contextual-related-posts/includes/main-query.php
function get_crp( $args = array() ) { : $custom_template = apply_filters( 'crp_custom_template', null, $results, $args );
●2020.1 追記
該当記事がゼロの時、空白を返すようにした。filterの後、そこで抜けずにプラグインのdefaultの処理に進んでしまうため。(そしてプラグイン側でエラーが出る)
空白が出力されて困る場合は、trim後の文字長で空かどうかを判定し、空でない場合のみ出力する。
if ( function_exists( 'echo_crp' ) ) { $ret = get_crp(['echo'=>false]); if (strlen(trim($ret)) > 0) { echo $ret; } }