NexusMap
Visualizes all active JetEngine Many-to-Many relationships as an interactive, draggable Network Graph powered by Vis.js.
by Abe Prangishvili · github.com/prangishviliabe/nexusmap · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/prangishviliabe/nexusmap/archive/refs/heads/main.zipReadme
🕸️ NexusMap
Visualize, query, and explore all your JetEngine Many-to-Many relationships dynamically.
NexusMap is a powerful dual-purpose WordPress plugin. It automatically discovers every active JetEngine relation and renders them as a stunning, interactive network graph powered by Vis.js. With recent updates, it integrates real-time searching, visual thumbnails, and layout toggles straight into your admin dashboard, while also serving as a backend utility to output JetEngine relationships dynamically in Elementor grids without complex SQL or N+1 queries.
✨ Features (What's New in v1.5)
- 🔍 Realtime Graph Search — Instantly filter thousands of relational nodes by typing directly into the legend. Irrelevant nodes fade out while isolating the searched match and its direct relational neighbors.
- 🖼️ Visual Image Nodes — Network nodes no longer rely solely on generic shapes. If a related Post/Author/Course has a "Featured Image", NexusMap renders it as a circular thumbnail directly on the physics-driven graph canvas!
- 🗂️ Gallery View Toggle — Switch instantly from the traditional physics Graph View into an elegant, card-based Gallery HTML Layout natively within the Dashboard.
- 🌐 Built-in Localization (i18n) — A custom, high-performance static translation engine guarantees 0ms overhead, with complete UI translation spanning Georgian (ka) and English (en), configurable globally from the new Settings page.
- 🔗 Dynamic Loop Output — Output connected items (like Authors of a Course) dynamically inside Elementor/JetEngine loops using pseudo-meta keys, Shortcodes, or JetEngine Macros.
- ⚡ N+1 Eliminated — Batched caching using
_prime_post_caches()internally ensures rendering hundreds of connections takes only 1 database query. - 🔐 Secure & Protected — Auth-protected REST APIs, Lock-Screen with bcrypt-hashed Dev Keys, SQL column allowlist, SRI integrity checks, strict input sanitization, and WordPress-native options integration.
📋 Requirements
| Requirement | Minimum Version |
|---|---|
| WordPress | 6.0+ |
| PHP | 8.0+ |
| JetEngine | 3.x+ (with Relations module enabled) |
🚀 Installation
- Download the latest release
.zipfile from the repository. - In WordPress admin, go to Plugins → Add New → Upload Plugin.
- Upload the
.zipfile and click Install Now. - Activate the plugin.
- Provide your Developer unlock key (if prompted).
🛠 Usage: Dashboard Administration
Once active, hover over the NexusMap tab in your WordPress Dashboard menu.
- Dashboard: Review real-time representations of all connected Many-to-Many relationships. Use the toolbar to filter by specific relationship types.
- Settings: Toggle between natively supported UI Localizations (Georgian/English).
📖 Usage: Displaying the Graph (Frontend)
Visualize relations publicly by placing the shortcode anywhere on a page:
[nexus_map]
Graph Shortcode Attributes
| Attribute | Default | Description |
|---|---|---|
relations |
"" (all) |
Comma-separated JetEngine relation IDs to display |
height |
600px |
Canvas height (any valid CSS value) |
physics |
true |
Enable/disable spring-physics simulation |
📖 Usage: Dynamic Data Output
Need text data of connected relations? NexusMap allows you to retrieve connected relations on-demand inside JetEngine queries without complex queries.
Method 1: The "Pseudo-Meta" Hack (Recommended)
Automatically push relation data into standard Elementor/Jet widgets.
- Add a Dynamic Field widget to your grid.
- Set Source to
Meta Data. - In the Object field / Meta field input, type exactly:
nexus_relation_{ID}(replace{ID}with your JetEngine relation ID, e.g.,nexus_relation_12). - Disable "Filter field output". NexusMap intercepts this request intercepting the IDs and spitting back the formatted hyperlink strings.
Method 2: Shortcode
Use the [nexus_related] shortcode inside any standard text editor or Shortcode widget.
[nexus_related relation="12"]
Attributes:
relation(required): The JetEngine Relation ID.separator: String separating items (Default:,).link: Output items as<a href="...">links? (Default:true).limit: Max items to fetch (Default:0for all).
Method 3: JetEngine Custom Macro
Useful inside JetEngine dynamic tags or listing grids.
%nexus_related|12|true|, %
Parameters: Relation ID | Link Output (true/false) | Separator
Method 4: Elementor Pro Loop Grids (NEW)
You can directly feed connected post IDs into an Elementor Pro Loop Grid using the custom query interceptor.
- Add a Loop Grid widget in Elementor.
- Go to Query -> Query ID.
- Type:
nexus_relation_{ID}(e.g.nexus_relation_12). - Elementor will automatically display only the posts connected to the current post/item through that relation!
💻 Tech Stack & Architecure
- Vis.js Network: Canvas graph acceleration and spring-physics.
- WordPress REST API: Bulk asynchronous graph hydrating.
- CSS Grid/Variables: BEM structured dynamic interfaces independent of heavyweight frameworks.
📜 Changelog
v1.5.2 — 2026-04-09 (Security & Optimization)
Security:
- Replaced reversible Base64 dev key with bcrypt
password_hash()/password_verify() - All
$_POSTinputs sanitized withsanitize_text_field()+wp_unslash() - SQL column allowlist (
get_safe_columns()) prevents injection via interpolated column names register_setting()enforces language allowlist viasanitize_callback- Shortcode & Elementor query relation attributes sanitized before use
- Admin JS
innerHTMLreplaced with DOM API (createElement/appendChild) - Hardcoded Georgian error string replaced with translatable
esc_html__()
Performance:
- Bulk-primed thumbnail meta + attachment caches, eliminating N+1 queries
- Cache invalidation filtered by M2M relation post types only
- Version migration hook clears stale schema/graph caches on upgrade
Infrastructure:
- Table existence check before
SHOW COLUMNSin schema detection uninstall.phpremoves all plugin options on deletion- Fixed em dash display in admin stats bar
v1.5.1 — 2026-04-07
- Fixed interactive search bug with string/integer object reference mismatches
- Refactored Elementor Pro Query Hook injection for proper post context resolution
v1.5.0 — 2026-04-07
- Global Settings page with language configuration
- Custom i18n translation engine (Georgian & English)
- Static array-based dictionary for 0ms overhead
v1.4.1 — 2026-04-06
- Realtime local search from Legend panel
- DataView filtering keeps neighbors visible during search
v1.3.0 — 2026-04-06
- Visual image nodes (Featured Image → circularImage)
- Gallery presentation mode with CSS card grid
v1.2.0 — 2026-04-05
- Lock screen with hashed development key
_prime_post_caches()for bulk relationship lookups
v1.1.0 — 2026-04-01
- Dynamic meta injector (
nexus_relation_{ID}pseudo-meta keys) - Shortcode API (
[nexus_related]) and JetEngine Macro
v1.0.0 — 2026-03-31
- Initial release — Vis.js network graph for JetEngine M2M relations
📝 License
NexusMap is released under the GPL-2.0-or-later license.
Built with ❤️ by Abe Prangishvili