WP Manifestindependent plugin directory
manifest / admin / nexusmap

NexusMap

Visualizes all active JetEngine Many-to-Many relationships as an interactive, draggable Network Graph powered by Vis.js.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/prangishviliabe/nexusmap/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

WordPress 6.0+ PHP 8.0+ JetEngine Required License GPL-2.0-or-later Version 1.5.2

🕸️ 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

  1. Download the latest release .zip file from the repository.
  2. In WordPress admin, go to Plugins → Add New → Upload Plugin.
  3. Upload the .zip file and click Install Now.
  4. Activate the plugin.
  5. 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.

  1. Add a Dynamic Field widget to your grid.
  2. Set Source to Meta Data.
  3. In the Object field / Meta field input, type exactly: nexus_relation_{ID} (replace {ID} with your JetEngine relation ID, e.g., nexus_relation_12).
  4. 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: 0 for 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.

  1. Add a Loop Grid widget in Elementor.
  2. Go to Query -> Query ID.
  3. Type: nexus_relation_{ID} (e.g. nexus_relation_12).
  4. 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 $_POST inputs sanitized with sanitize_text_field() + wp_unslash()
  • SQL column allowlist (get_safe_columns()) prevents injection via interpolated column names
  • register_setting() enforces language allowlist via sanitize_callback
  • Shortcode & Elementor query relation attributes sanitized before use
  • Admin JS innerHTML replaced 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 COLUMNS in schema detection
  • uninstall.php removes 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