投稿や固定ページ一覧に「更新された投稿」絞り込み機能を追加する方法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

はじめに

管理画面の投稿や固定ページ一覧で、更新日のカラムを追加し、更新日順でソートしたいケースがあります。
しかし、更新日でソートしても、必ずしも更新された投稿が一覧の先頭に並ぶとは限りません。

例えば、表1に示すように新規投稿は「投稿日」と「更新日」が同じになります。

原因
投稿タイトル投稿日更新日備考
新規投稿2025-07-082025-07-08投稿日=更新日、新規投稿
更新済投稿2025-07-012025-07-07投稿日は古いが更新日が新しい投稿

そのため、更新日で並び替えても、更新された投稿だけが先頭に集まるとは限らず、視認性が低下する原因となります。

対策として、「更新された投稿」での絞り込み検索を追加します。

この記事では、この方法について説明します。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。

// 一覧にフィルターボタンを追加
add_action('restrict_manage_posts', function ($post_type) {
  if (!in_array($post_type, ['post', 'page'], true)) {
    return;
  }

  $selected = sanitize_text_field($_GET['filter_modified_posts'] ?? '');

  ?>
  <select name="filter_modified_posts">
    <option value="">全ての投稿</option>
    <option value="1" <?php selected($selected, '1'); ?>>更新された投稿</option>
  </select>
  <?php
});


// 投稿クエリの取得条件を変更
add_filter('posts_where', function ($where, $query) {
  global $wpdb;

  // 投稿日と更新日の日付が異なる投稿のみを表示
  if (
    is_admin() &&
    $query->is_main_query() &&
    ($_GET['filter_modified_posts'] ?? '') === '1'
  ) {
    $where .= " AND DATE({$wpdb->posts}.post_date) != DATE({$wpdb->posts}.post_modified)";
  }

  return $where;
}, 10, 2);

さいごに

今回紹介した方法を使えば、投稿、固定ページ一覧で「更新された投稿」の絞り込みを簡単に実現できます。
絞り込み条件を利用すれば、投稿日と更新日が異なる投稿を素早く確認でき、効率的な投稿管理が可能です。

タイトルとURLをコピーしました