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.

by Abe Prangishvili · github.com/prangishviliabe/nexusmap · website

0stars
0forks

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.zip

Readme

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

Read the full README on GitHub →