WP Manifestindependent plugin directory
manifest / content / produktiv-listing

Produktiv Listing

Produktiv Listing is a WordPress plugin for aggregating and displaying the content

by Produktiv · github.com/gokrftwrk/produktiv-listing

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/gokrftwrk/produktiv-listing/archive/refs/heads/main.zip

Produktiv Listing - User Documentation

Table of Contents

  1. About the Plugin
  2. Local vs Remote Entries
  3. Installation and Activation
  4. Plugin Settings
  5. Creating Entries
  6. Adding Block to Page
  7. Block Settings
  8. Frontend Filters
  9. Frequently Asked Questions

About the Plugin

Produktiv Listing is a WordPress plugin for aggregating and displaying three types of content:

  • Careers (Job Vacancies)
  • Volunteers (Volunteer Positions)
  • Reports (Documents/Reports)

Key Features

1. Data Synchronization from Multiple Sites

  • Automatically collects data from multiple WordPress sites via REST API
  • Supports HTTP Basic Authentication
  • 12-hour caching for fast performance
  • ⚠️ IMPORTANT: Remote entries do NOT create copies in your database - they are only displayed in the block via API
  • You will see remote entries only on the frontend (in the block), but NOT in WordPress Admin panel

2. Local Management

  • Add your own entries on each site (via WordPress Admin → Careers/Volunteers/Reports)
  • Only local entries appear in admin for editing
  • Categories and taxonomies for content organization
  • Attach PDF files to each entry

3. Display via Gutenberg Block

  • Flexible block for displaying listings
  • Filter by regions, categories, and status
  • Automatic filtering by site region
  • Responsive design

4. REST API

  • Public endpoint for data exchange between sites
  • Format: /wp-json/produktiv-listing/v1/items

Local vs Remote Entries

What's Important to Understand

The plugin works with two types of entries:

1. Local Entries

  • ✅ Created on your site
  • ✅ Stored in your database
  • ✅ Visible in WordPress Admin panel (Careers, Volunteers, Reports)
  • ✅ Can be edited, deleted, added
  • ✅ Displayed in the block on frontend

Where to find them:

WordPress Admin → Careers (or Volunteers, or Reports)

2. Remote Entries

  • ✅ Created on other sites
  • NOT stored in your database
  • NOT visible in WordPress Admin panel
  • CANNOT be edited on your site
  • ✅ Displayed in the block on frontend together with local entries
  • 🔄 Fetched via REST API every 12 hours

Where to find them:

Only on frontend - in the Produktiv Listing block on your pages

How It Works

┌─────────────────────────────────────────────────┐
│         Your Site (example.com)                  │
├─────────────────────────────────────────────────┤
│                                                  │
│  WordPress Admin:                                │
│  • Careers (3 local entries) ✅                 │
│  • Volunteers (2 local entries) ✅              │
│                                                  │
│  Block on frontend shows:                        │
│  • 3 local Careers ✅                           │
│  • 10 remote Careers (from site1.com) 🌐       │
│  • 5 remote Careers (from site2.com) 🌐        │
│  ────────────────────────────────               │
│  Total: 18 Careers in block                      │
│                                                  │
└─────────────────────────────────────────────────┘

Why This Approach?

Advantages:

  • 📦 Space Saving - no data duplication in each database
  • 🔄 Up-to-date - changes on remote site automatically appear
  • 🎯 Centralized Management - each site manages its own data
  • 🚀 Performance - 12-hour caching ensures fast operation

Important:

  • To edit a remote entry - log into the admin of that site where it was created
  • On your site, you only manage local entries

Installation and Activation

Step 1: Upload Plugin

Via WordPress Dashboard:

  1. Go to Plugins → Add New
  2. Click Upload Plugin
  3. Select file produktiv-listing-v0.3.0.zip
  4. Click Install Now
  5. After installation, click Activate Plugin

Via FTP:

  1. Unzip produktiv-listing-v0.3.0.zip on your computer
  2. Upload produktiv-listing folder to /wp-content/plugins/
  3. Go to WordPress Dashboard → Plugins
  4. Find Produktiv Listing and click Activate

Step 2: Verify Activation

After activation, you will see:

  • Careers - new post type in admin menu
  • Volunteers - new post type
  • Reports - new post type
  • Tools → Produktiv Listing Settings - settings page

Plugin Settings

Go to WordPress Admin → Tools → Produktiv Listing Settings

1. Sites (Sites for Synchronization)

Purpose: Specify URLs of other WordPress sites from which to collect data.

How to Configure:

  1. In the Sites (one per line) field, enter site URLs
  2. One URL per line
  3. Basic format:
    https://example.com
    https://another-site.org
    https://third-site.com.au

Important:

  • Produktiv Listing plugin must be installed on all sites
  • Plugins must be activated
  • Sites must be accessible via internet

Example:

[Screenshot: Sites field with example URLs]

💡 For Developers: HTTP Basic Authentication

If the remote site is password-protected (staging server, closed dev site), use one of these formats:

Format 1 (recommended):

https://example.com?user=admin&pass=secret123

Format 2 (alternative):

https://admin:secret123@example.com

Where to get credentials:

  • Contact the administrator of the remote site
  • Or if you configured Basic Auth yourself - use the same credentials

Note: Regular public sites do NOT need this - just specify the regular URL.


2. Regions (Site Region)

Purpose: Region name for the current site (e.g., "Victoria", "New South Wales", "Queensland").

How to Configure:

  1. In the Regions field, enter the region name
  2. Click Save settings

Usage:

  • All entries from this site automatically have this region
  • Users can filter entries by regions
  • Region is displayed on entry cards

Example:

Regions: Victoria
[Screenshot: Regions field with example]

3. Default Region Filter

Purpose: Automatically show only entries from your region when page loads.

How it works:

  • Enabled - when opening the page, only entries from your region are shown
  • Disabled - entries from all regions are shown

Recommendation: Enable if you want to show local entries first.

Users can:

  • Clear the filter (see all entries)
  • Select other regions from the list
[Screenshot: Default Region Filter checkbox]

4. Delete Data on Uninstall

Purpose: Controls what happens when plugin is deleted.

⚠️ IMPORTANT:

  • Disabled (recommended) - data is preserved even after plugin deletion
  • Enabled - when deleting plugin, ALL data will be permanently removed

What will be deleted when enabled:

  • All settings (Sites, Regions)
  • All Careers, Volunteers, Reports posts
  • All categories and terms
  • All attached PDF files

Recommendation: Keep disabled for data safety.

[Screenshot: Delete Data on Uninstall checkbox with warning]

5. Refresh Cache

Purpose: Force update data from remote sites.

When to use:

  • Data on remote site has changed
  • Need to see updates immediately
  • Synchronization issues occurred

How to use:

  1. Click button Refresh cache (clear transients)
  2. Wait for success message
  3. Refresh page with block

Automatic update: Cache automatically refreshes every 12 hours.

[Screenshot: Refresh cache button]

Creating Entries

You can add your own entries on each site.

Creating Careers (Vacancies)

  1. WordPress Admin → Careers → Add New

  2. Fill in basic information:

    • Title - position name (e.g., "Marketing Manager")
    • Content - detailed job description
    • Featured Image - image for card
    • Excerpt - short description
    • Career Categories - select or add categories
  3. Fill in metadata (right sidebar):

    File (PDF):

    • Click Select PDF
    • Choose file from media library or upload new
    • This can be a position description in PDF format

    Fallback URL:

    💡 Link Priority:

    • If PDF exists - "See Details" button leads to PDF file
    • If no PDF but Fallback URL exists - button leads to Fallback URL
    • If both empty - button leads to entry page (permalink)

    Position Type:

    • ☑ Full Time
    • ☑ Part Time
    • ☑ Casual
    • ☑ Temporary
    • ☑ Contract
    • ☑ Permanent
    • Can select multiple

    Ongoing:

    • ☑ Position without closing date
    • ☐ Position with specific closing date

    Close Date:

    • Shown when Ongoing is disabled
    • Format: YYYY-MM-DD (e.g., 2026-03-31)
  4. Click Publish

[Screenshot: Editing Career entry]
[Screenshot: Career Metabox]

Creating Volunteers (Volunteer Positions)

  1. WordPress Admin → Volunteers → Add New

  2. Fill in basic information:

    • Title, Content, Featured Image, Excerpt
    • Volunteer Categories
  3. Fill in metadata:

    • File (PDF) - volunteer position description
    • Fallback URL - alternative link
    • Ongoing - is position permanent
    • Close Date - closing date (if not Ongoing)

    💡 Priority: PDF → Fallback URL → Entry Permalink

  4. Click Publish

[Screenshot: Editing Volunteer entry]

Creating Reports

  1. WordPress Admin → Reports → Add New

  2. Fill in basic information:

    • Title, Content, Featured Image
    • Report Categories
  3. Fill in metadata:

    • File (PDF) - report file
    • Fallback URL - alternative link

    💡 Priority: PDF → Fallback URL → Entry Permalink

  4. Click Publish

[Screenshot: Editing Report entry]

Adding Block to Page

Step 1: Create or Edit Page

  1. Pages → Add New or edit existing page
  2. In Gutenberg editor click + (Add block)
  3. In search type "Produktiv Listing"
  4. Click on Produktiv Listing block
[Screenshot: Block search in Gutenberg]

Step 2: Block Added

Block will automatically display with listing preview.

[Screenshot: Block in editor]

Block Settings

When block is selected, Settings panel appears on the right.

1. Post Type

Purpose: Choose what to display.

Options:

  • Careers - job vacancies
  • Volunteers - volunteer positions
  • Reports - reports

How to change:

  1. Click on block
  2. In Settings panel on right find Post Type
  3. Select needed type from list
[Screenshot: Post Type dropdown]

2. Title

Purpose: Heading above listing.

Examples:

  • "Current Job Opportunities"
  • "Volunteer with Us"
  • "Our Reports"

How to add:

  1. In Title field enter text
  2. Title appears above filters
[Screenshot: Title field]

3. Description

Purpose: Additional text under title.

Examples:

  • "Explore career opportunities across our network"
  • "Join our team of dedicated volunteers"

Supports:

  • Simple HTML tags (p, br, strong, em)
  • Automatic paragraphs

How to add:

  1. In Description field enter text
  2. Description appears between title and filters
[Screenshot: Description field]

4. Use Default Region Filter

Purpose: Controls whether to apply automatic region filter for this block.

Options:

  • Enabled - on page load only entries from site region are shown
  • Disabled - all entries are shown

Interaction with global setting:

  • Only works if "Default Region Filter" is enabled in Settings
  • Can be disabled for individual blocks

Use case example:

  • On homepage: enabled (show local)
  • On "All Opportunities" page: disabled (show all)
[Screenshot: Toggle Use Default Region Filter]

Frontend Filters

When users open a page with the block, they see:

Filter Section

[Screenshot: Filter section on frontend]

1. Regions

  • Dropdown list of all available regions
  • Can select multiple regions
  • Shows entries from any selected region

2. Categories

  • Dropdown list of categories
  • Can select multiple categories
  • Shows entries that have at least one selected category

3. Status - for Careers only

  • Dropdown list of position types:
    • Full Time
    • Part Time
    • Casual
    • Temporary
    • Contract
    • Permanent
  • Can select multiple types

4. Reset Filters

  • Button to clear all filters
  • Returns to initial state

Results Section

Results - displays all entries matching filters.

Each card contains:

  • Title of entry
  • Categories (comma-separated)
  • Region
  • Date (Close Date or Published Date)
  • Position Type (for Careers)
  • "See Details" button - link to detail page or PDF
[Screenshot: Grid with entry cards]

How Filtering Works

Automatic filtering:

  1. User opens page
  2. If "Default Region Filter" is enabled - automatically shows only local entries
  3. "Regions" filter already has selected value

Manual filtering:

  1. User opens dropdown (Region, Category or Status)
  2. Selects one or multiple options
  3. Entry list instantly updates (without page reload)
  4. Shows only entries matching all selected filters

Clearing filters:

  1. Click next to selected value in dropdown
  2. Or click Reset Filters button
  3. All filters cleared, all entries shown
[Screenshot: Filtering process]

Frequently Asked Questions

1. Why don't I see entries from other sites in WordPress Admin?

Answer: This is normal plugin behavior! Remote entries are NOT stored in your database, so they:

  • NOT displayed in WordPress Admin → Careers/Volunteers/Reports
  • Displayed only on frontend in Produktiv Listing block

In admin you see:

  • Only entries created on your site

On frontend (in block) you see:

  • Entries from your site + entries from all connected sites

How to edit remote entry:

  1. Log into admin of that site where it was created
  2. There you can edit it
  3. Changes automatically appear on all sites (within 12 hours or after "Refresh cache")

2. How often does data from other sites update?

Answer: Automatically every 12 hours. For immediate update use "Refresh cache" button in Settings.


3. Can I display only entries from local site?

Answer: Yes, just don't add URLs of other sites in Settings → Sites. Only entries created on current site will be shown.


4. How many sites can I add for synchronization?

Answer: Up to 50 sites. Each site can provide up to 100 entries.


5. Can I have multiple blocks on one page?

Answer: Yes, you can add as many blocks as needed. Each can have different settings (different post types, different titles, etc.).


6. What to do if entries from another site don't appear?

Step 1: Basic Checks

  1. ✅ Plugin activated on remote site
  2. ✅ URL entered correctly in Settings → Sites
  3. ✅ Remote site accessible via internet
  4. ✅ If site is password-protected - correct credentials provided
  5. ✅ Try clicking "Refresh cache"

Step 2: Check REST API

Open in browser:

https://remote-site.com/wp-json/produktiv-listing/v1/items

(replace remote-site.com with remote site URL)

What should appear:

{
  "site": "https://remote-site.com",
  "regions": "Victoria",
  "count": 15,
  "items": [...]
}

If you see error 403 or 404:

🛡️ Issue: Wordfence Blocks REST API

Solution:

  1. On remote site: WordPress Admin → Wordfence → All Options
  2. Find "Rate Limiting" section
  3. Add your site's IP address to Whitelist
  4. Or disable: "Immediately block fake Google crawlers" (sometimes falsely blocks)

Alternative:

  • Wordfence → Firewall → Manage Firewall
  • Set Learning Mode instead of Enabled and Protecting
  • Wait 1 day for Wordfence to learn
  • Then return to Enabled and Protecting

☁️ Issue: Cloudflare Blocks Requests

Solution:

  1. Go to Cloudflare Dashboard → Security → WAF
  2. Add Firewall Rule:
    URI Path contains "/wp-json/produktiv-listing"
    → Action: Allow
  3. Or:
    • Security → Settings
    • Temporarily reduce Security Level to "Medium"
    • Add your site's IP to IP Access Rules (Allow)

🔒 Issue: REST API Disabled on Server

Check: Open:

https://remote-site.com/wp-json/

If you see {"namespace":"wp/v2",...} - REST API works ✅

If you see blank page or 404:

  1. Check .htaccess - REST API might be blocked
  2. Contact hosting provider
  3. Check security plugins (Sucuri, iThemes Security)

🚫 Issue: CORS (Cross-Origin) Blocking

If you see CORS error in browser console:

For developers: Add to remote site's wp-config.php:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');

Or install "Enable CORS" plugin on remote site.

Step 3: Still not working?

Contact administrator of remote site with this information:

Produktiv Listing plugin requires access to REST API endpoint:
/wp-json/produktiv-listing/v1/items

Please ensure that:
- Plugin is activated
- REST API not blocked by Wordfence/Cloudflare/other security plugins
- Endpoint is publicly accessible (without authentication)

7. How to delete plugin without losing data?

Answer:

  1. Go to Tools → Produktiv Listing Settings
  2. Make sure "Delete Data on Uninstall" checkbox is DISABLED
  3. Now you can safely deactivate or delete plugin
  4. All data remains in database
  5. When reinstalling plugin, all data will be available

8. How to change entry card design?

Answer: Design is controlled via plugin CSS file. For customization:

  1. Add CSS in Theme Customizer (Appearance → Customize → Additional CSS)
  2. Or in child theme style.css file
  3. Main classes:
    • .filterable_listing - container
    • .corporate-grid - entries grid
    • .corporate-object - individual card
    • .filter-widget - filter section

9. Can I export/import entries?

Answer: Yes, use standard WordPress tools:

  • Tools → Export - export entries
  • Tools → Import - import entries
  • Select post types: Careers, Volunteers, Reports

Important: Only local entries are exported. Remote entries live on other sites and are not exported.


10. How to configure HTTP Basic Auth for protected site?

Answer: If remote site is password-protected (staging/dev server), see section "For Developers: HTTP Basic Authentication" in Sites settings.

Short: Add ?user=admin&pass=secret to remote site URL.


11. Does plugin work with WordPress Multisite?

Answer: Yes, plugin is Multisite compatible. Activate it on each site individually or Network Activate for all sites in network.


Technical Information

Version: 0.3.0 Compatibility: WordPress 5.0+ Requirements: PHP 7.0+ Author: Produktiv

Uses:

  • Gutenberg Blocks API
  • WordPress REST API
  • Custom Post Types
  • Custom Taxonomies
  • WordPress Transients API (caching)
  • Select2 (filter UI)

Support

If you have questions or issues:

  1. Check "Frequently Asked Questions" section above
  2. Ensure you're using latest plugin version
  3. Contact your site administrator or developers

Thank you for using Produktiv Listing!

produktiv-listing