投稿や固定ページ一覧に「スラッグ」「ID」絞り込み機能を追加する方法

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

完成イメージ

実装手順

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

// 一覧にフィルターボタンを追加
add_action('restrict_manage_posts', function () {
  global $pagenow;

  if ($pagenow !== 'edit.php') {
    return;
  }

  $slug_key = isset($_GET['slug_key']) ? sanitize_text_field($_GET['slug_key']) : '';
  $post_id  = isset($_GET['post_id']) ? absint($_GET['post_id']) : '';
  ?>
  <input type="text" style="margin-right: 6px;" name="slug_key" value="<?= esc_attr($slug_key); ?>" placeholder="スラッグの部分一致で検索">
  <input type="number" style="margin-right: 6px;" name="post_id" value="<?= $post_id ?: ''; ?>" placeholder="投稿IDで検索">
  <?php
});


// 投稿クエリの取得条件を変更
add_action('pre_get_posts', function ($query) {
  global $pagenow;

  if (!is_admin() || !$query->is_main_query() || $pagenow !== 'edit.php') {
    return;
  }

  $post_id = isset($_GET['post_id']) ? absint($_GET['post_id']) : 0;

  // 投稿ID指定を優先
  if ($post_id > 0) {
    $query->set('p', $post_id);
    return;
  }

  $slug_key = isset($_GET['slug_key']) ? sanitize_text_field($_GET['slug_key']) : '';

  // スラッグの部分一致検索
  if ($slug_key !== '') {
    add_filter('posts_where', function ($where, $wp_query) use ($slug_key, $query) {
      // 対象のクエリに対してのみ適用
      if ($wp_query !== $query) {
        return $where;
      }

      global $wpdb;
      $encoded_slug = urlencode($slug_key);

      $where .= $wpdb->prepare(
        " AND ({$wpdb->posts}.post_name LIKE %s OR {$wpdb->posts}.post_name LIKE %s)",
        '%' . $wpdb->esc_like($slug_key) . '%',
        '%' . $wpdb->esc_like($encoded_slug) . '%'
      );

      return $where;
    }, 10, 2);
  }
});

さいごに

今回紹介した方法を使えば、投稿や固定ページ一覧画面でスラッグとIDを使った絞り込み検索が簡単に追加できます。
この機能を活用すれば、管理画面での投稿検索が大幅に効率化され、特定の投稿を素早く見つけることができるようになります。

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