Produktiv Listing
Produktiv Listing is a WordPress plugin for aggregating and displaying the content
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.zipProduktiv Listing - User Documentation
Table of Contents
- About the Plugin
- Local vs Remote Entries
- Installation and Activation
- Plugin Settings
- Creating Entries
- Adding Block to Page
- Block Settings
- Frontend Filters
- 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:
- Go to Plugins → Add New
- Click Upload Plugin
- Select file
produktiv-listing-v0.3.0.zip - Click Install Now
- After installation, click Activate Plugin
Via FTP:
- Unzip
produktiv-listing-v0.3.0.zipon your computer - Upload
produktiv-listingfolder to/wp-content/plugins/ - Go to WordPress Dashboard → Plugins
- 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:
- In the Sites (one per line) field, enter site URLs
- One URL per line
- 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:
- In the Regions field, enter the region name
- 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:
- Click button Refresh cache (clear transients)
- Wait for success message
- 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)
-
WordPress Admin → Careers → Add New
-
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
-
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:
- Alternative link (if no PDF)
- For example, link to application form
- Format: https://example.com/apply-form
💡 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)
-
Click Publish
[Screenshot: Editing Career entry]
[Screenshot: Career Metabox]
Creating Volunteers (Volunteer Positions)
-
WordPress Admin → Volunteers → Add New
-
Fill in basic information:
- Title, Content, Featured Image, Excerpt
- Volunteer Categories
-
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
-
Click Publish
[Screenshot: Editing Volunteer entry]
Creating Reports
-
WordPress Admin → Reports → Add New
-
Fill in basic information:
- Title, Content, Featured Image
- Report Categories
-
Fill in metadata:
- File (PDF) - report file
- Fallback URL - alternative link
💡 Priority: PDF → Fallback URL → Entry Permalink
-
Click Publish
[Screenshot: Editing Report entry]
Adding Block to Page
Step 1: Create or Edit Page
- Pages → Add New or edit existing page
- In Gutenberg editor click + (Add block)
- In search type "Produktiv Listing"
- 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:
- Click on block
- In Settings panel on right find Post Type
- 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:
- In Title field enter text
- 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:
- In Description field enter text
- 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:
- User opens page
- If "Default Region Filter" is enabled - automatically shows only local entries
- "Regions" filter already has selected value
Manual filtering:
- User opens dropdown (Region, Category or Status)
- Selects one or multiple options
- Entry list instantly updates (without page reload)
- Shows only entries matching all selected filters
Clearing filters:
- Click ✕ next to selected value in dropdown
- Or click Reset Filters button
- 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:
- Log into admin of that site where it was created
- There you can edit it
- 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
- ✅ Plugin activated on remote site
- ✅ URL entered correctly in Settings → Sites
- ✅ Remote site accessible via internet
- ✅ If site is password-protected - correct credentials provided
- ✅ 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:
- On remote site: WordPress Admin → Wordfence → All Options
- Find "Rate Limiting" section
- Add your site's IP address to Whitelist
- 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:
- Go to Cloudflare Dashboard → Security → WAF
- Add Firewall Rule:
URI Path contains "/wp-json/produktiv-listing" → Action: Allow - 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:
- Check
.htaccess- REST API might be blocked - Contact hosting provider
- 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:
- Go to Tools → Produktiv Listing Settings
- Make sure "Delete Data on Uninstall" checkbox is DISABLED
- Now you can safely deactivate or delete plugin
- All data remains in database
- 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:
- Add CSS in Theme Customizer (Appearance → Customize → Additional CSS)
- Or in child theme
style.cssfile - 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:
- Check "Frequently Asked Questions" section above
- Ensure you're using latest plugin version
- Contact your site administrator or developers
Thank you for using Produktiv Listing!