WordPressで会員制サイトや学習サイトを運営していると、ユーザーが「前回どのページを閲覧したか」を知りたい場面があります。この記事では、ログイン中のユーザーが最後に閲覧した投稿を保存し、次回ログイン時に表示する仕組みを実装します。
最後に閲覧した投稿のIDを記録する処理
以下のコードをfunctions.php
に追加してください。投稿ページが表示されたときに、ログイン中のユーザーに対して投稿IDを記録します。
function save_last_viewed_post() {
if (is_single() && is_user_logged_in()) {
$user_id = get_current_user_id();
update_user_meta($user_id, 'last_viewed_post_id', get_the_ID());
}
}
add_action('wp', 'save_last_viewed_post');
この処理は、投稿ページが表示された際に実行され、ユーザーメタに`last_viewed_post_id`というキーで投稿IDが保存されます。
保存された投稿を取得して表示する方法
次に、保存された投稿を取得して、ユーザーに表示する処理を実装します。以下の関数を任意のテンプレート(例:サイドバー、ダッシュボードなど)に追加します。
function display_last_viewed_post() {
if (!is_user_logged_in()) return;
$user_id = get_current_user_id();
$last_post_id = get_user_meta($user_id, 'last_viewed_post_id', true);
if ($last_post_id) {
$post = get_post($last_post_id);
if ($post && $post->post_status === 'publish') {
echo '<div class="last-viewed-post">';
echo '<h3>前回閲覧した記事</h3>';
echo '<a href="' . esc_url(get_permalink($post)) . '">' . esc_html(get_the_title($post)) . '</a>';
echo '</div>';
}
}
}
この関数は、ログイン中のユーザーにだけ表示され、前回閲覧した記事へのリンクを表示します。
ウィジェットやショートコード化するには?
この機能をウィジェットやショートコードとして使いたい場合は、以下のようにショートコード化できます。
// ショートコードで出力
function shortcode_last_viewed_post() {
ob_start();
display_last_viewed_post();
return ob_get_clean();
}
add_shortcode('last_viewed_post', 'shortcode_last_viewed_post');
投稿本文やウィジェットに[last_viewed_post]
と記述することで、前回の閲覧投稿リンクを表示できます。
まとめ
ログインユーザーの最後に閲覧した投稿を記録・表示することで、ユーザー体験を向上させることができます。特に、学習コンテンツ、レビュー記事、マイページ型サイトなどで活用価値が高い機能です。WordPressのユーザーメタと条件分岐を組み合わせることで、簡単に実装できます。