WP Manifestindependent plugin directory
manifest / admin / wp-loupe-admin-search

WP Loupe - Admin Search WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

A faster, smarter search experience for the WordPress admin. This add-on replaces the default admin search with WP Loupe-powered typo-tolerant, relevance-ranked results.

★ 4stars
45release downloads
1.2.0latest · 5mo ago

Install

Download wp-loupe-admin-search.zip From the 1.2.0 release on GitHub, Apr 27, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/soderlind/wp-loupe-admin-search/releases/download/1.2.0/wp-loupe-admin-search.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

A faster, smarter search experience for the WordPress admin. This add-on replaces the default admin search with WP Loupe-powered typo-tolerant, relevance-ranked results.

Features

  • Dashboard search widget — search your site content right from the dashboard.
  • Admin bar launcher — click "Loupe Search" in the admin bar to open a modal search overlay.
  • Modal search with scope switcher — search across content, users, plugins, and comments from a single modal.
  • Command Palette results — when the WordPress Command Palette is available, Loupe results appear dynamically as you type.
  • Native list table search — the standard search boxes on Posts, Pages, custom post types, Media, Users, and Comments screens are automatically enhanced with Loupe results.
  • Typo-tolerant & ranked — powered by the Loupe search engine, results are fuzzy-matched and ranked by relevance.
  • All admin post statuses — indexes publish, draft, pending, private, and future posts (the main WP Loupe plugin only indexes published content).
  • Separate admin indexes — maintains its own search indexes independent of the main WP Loupe plugin, stored as lightweight SQLite databases.
  • Automatic index management — indexes are built on first admin load and kept in sync incrementally when content changes.
  • Extensible schema — add custom meta fields to the search index via the wp_loupe_admin_schema filter.
  • Auto-updates — receives updates directly from GitHub releases.

Requirements

  • WordPress 6.8+
  • PHP 8.3+
  • WP Loupe plugin active

Installation

  1. Download the latest wp-loupe-admin-search.zip.
  2. In WordPress, go to Plugins → Add New → Upload Plugin and upload the zip.
  3. Activate the plugin.

The plugin updates itself automatically via GitHub releases using plugin-update-checker.

WP-CLI

# Rebuild all admin indexes
wp loupe-admin reindex

# Show index status
wp loupe-admin status

Developer Documentation

Hooks, REST API reference, indexed field schemas, class reference, and local development setup are documented in docs/developer.md.

Support and Issues

Report bugs or request features in GitHub Issues.

License

GPL-2.0+

AI Contribution Attribution

Assisted-by: GitHub Copilot:unspecified [VS Code]

Releases

2 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
1.2.0 latest
Apr 27, 2026 5mo ago
wp-loupe-admin-search.zip
44
Mar 21, 2026 7mo ago
wp-loupe-admin-search.zip
1
D+ grade

Security

WP Loupe - Admin Search 1.2.0 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
1.2.0
Findings
2
Worst severity
high
Content hash
0ad346272e6ec85f0aa1f8e7…

Findings

  • high Admin Loupe indexes with emails and unpublished content written under web-accessible wp-content

    information_disclosure

    The add-on builds SQLite admin indexes at {WP_CONTENT_DIR}/wp-loupe-db/admin/{entity}/ (default; wp_loupe_db_path filter) via wp_mkdir_p() at 0755 and never writes .htaccess, index.php, or a random directory name. Indexed documents include full post_content for draft/private/pending/future posts, every user's user_login and user_email, and comment_author_email plus pending/spam comment bodies. After any wp-admin request (Loader hooks reindex_all to admin_init with no current_user_can when needs_initial_index() is true — including a Subscriber hitting profile.php), an unauthenticated client can request /wp-content/wp-loupe-db/admin/user/loupe.db (and post/page/comment siblings). The parent WP Loupe plugin uses the same base path for published-only indexes and also does not protect it; this add-on is what places PII and unpublished bodies there. Observable consequence: dump of all user emails/logins and unpublished post/comment text by fetching static files, no REST nonce or login required.

    includes/class-wp-loupe-admin-indexer.php:250-278

    Recommendation

    Store admin indexes outside the web root (or under a non-served path). If they must live under wp-content, write both Apache Deny/Require all denied and an empty index.php, and document an nginx location deny. Do not index user_email / comment_author_email / unpublished post_content into a downloadable file. Gate reindex_all on manage_options (or a dedicated cap), not bare admin_init.

  • medium Native posts list search ignores author and status capability filters

    missing_capability

    WP_Loupe_Admin_Query_Integration::maybe_short_circuit_posts_query hooks posts_pre_query on edit.php/upload.php main searches and replaces the SQL result set with every Loupe hit for the queried post type(s). Returning posts from posts_pre_query skips WP_Query's WHERE clauses, including the author=current_user_id restriction WP_Posts_List_Table writes into $_GET for users without edit_others_posts, and perm=readable private-post restrictions. The interceptor also does not filter hits by the requested post_status, so a Contributor/Author search on Posts → All (or Drafts) lists other authors' draft, pending, private, and future posts that core would have hidden. Consumer is WP_Posts_List_Table, which prints title, author, date, and (excerpt mode) excerpt for every returned WP_Post even when row actions are capability-gated. REST content search is not affected (it drops hits without get_edit_post_link). Subscriber cannot open edit.php.

    includes/class-wp-loupe-admin-query-integration.php:42-106

    Recommendation

    Before hydrating hits, drop any post the current user cannot read/edit: current_user_can('edit_post', $id) (or read_post) and honor $query->get('author') / post_status. Alternatively, collect matching IDs then let WP_Query run with post__in plus the original author/status/perm vars instead of short-circuiting via posts_pre_query.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.