経緯
WordPressサイトで関連記事を表示するのにYet Another Related Posts Plugin (YARPP)というプラグインを使用していました。
サイト内で関連記事を表示するのはプラグインの設定画面で事足りていたのですが、
RSSのフィードphp内では独自のルールで整形する必要があったため
YARPPの関連記事データを取得することができるか調べました。
環境
- WordPress 5.2.3
- YARPP 4.4
問題
WordPress管理画面の[設定 > YARPP > 表示設定 RSS/Atomフィード用]で
[自動的にフィードで関連記事を表示する]にチェックを入れた場合
カスタムテンプレートを設定しても下記の要素で強制的に囲まれます。
<div class='yarpp-related-rss'></div>
そこで[自動的にフィードで関連記事を表示する]を無効にして下記の関数をフィードphpで使用しました。
関数
yarpp_get_related( $args, $reference_ID )
引数 | 必須/任意 | 説明 |
---|---|---|
$args | 必須項目 | 記事取得に関するオプション。「使用可能オプション($args)」参照 |
$reference_ID | 任意項目 | post_id。指定がなければ現在の記事が対象になる |
使用可能オプション($args)
$args = array(
// Pool options: 取得される記事を決定するオプション
'post_type' => array('post', 'page', ...),
'show_pass_post' => false, // show password-protected postsパスワード付きの記事を表示
'past_only' => false, // 比較元記事よりも前に公開された記事のみ表示
'exclude' => array(), // term_taxonomy_idのリスト。リスト内のtermを設定された記事は除外される
'recent' => false, // 最近公開された記事を制限するには'15 day', '20 week', '12 month'のように設定する
// Relatedness options: 関連度の計算に関わるオプション
// 比較対象元記事と候補記事の間のマッチスコアは「Weight」で判定される
'weight' => array(
'body' => 1,
'title' => 2, // 大きい値ほど大きく評価される
'tax' => array(
'post_tag' => 1,
... // 評価項目として設定したいtaxonomyをweightと共に追加する
)
),
// タクソノミーと数値のセットで最低限の共通数を設定する
'require_tax' => array(
'post_tag' => 1 // 例えばこの場合は少なくとも1つのpost_tagが共通している
),
// マッチスコアが最低限超えていなければならない値
'threshold' => 5,
// Display options: 表示オプション
'limit' => 5, // 取得件数
'order' => 'score DESC'
);
コード例
<?php
$rltd_args = array(
// 関連記事を表示する最大件数
'limit' => 3,
// ソート順を指定。 ソート順の対象と昇降順(ASCかDESC)を指定
'order' => 'score DESC'
);
$related_posts = yarpp_get_related($rltd_args);
foreach($related_posts as $related):
// タイトル内に特定の記号が入る場合を想定して変換
$title = htmlspecialchars($related->post_title);
?>
<relatedlink title="<?php echo $title; ?>" link="<?php echo esc_url(get_permalink($related->ID)); ?>" />
<?php endforeach; ?>