【WordPress】ログイン中のユーザーが最後に閲覧した投稿を記録・再表示する方法

【WordPress】ログイン中のユーザーが最後に閲覧した投稿を記録・再表示する方法 WordPress

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のユーザーメタと条件分岐を組み合わせることで、簡単に実装できます。