WP Manifestindependent plugin directory
manifest / integrations / open-government-publications

Open Government Publications WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

Import and publish Government Publications through the WordPress REST API.

★ 3stars
130release downloads
≈10active sites
2.0.11latest · 4mo ago

Install

Download open-government-publications.zip From the 2.0.11 release on GitHub, Jun 2, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/openwebconcept/open-government-publications/releases/download/2.0.11/open-government-publications.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

Plugin Open Government Publications

This WordPress plugin imports government publications from officielebekendmakingen.nl into WordPress and exposes them through the REST API.

Overview

Usage

After installation of the plugin (see Installation), open the plugin settings page by navigating to "Open Publications" -> "Settings". An import process should automatically start after an organization on the settings page has been configured. If not, navigate to "Open Publications" -> "Import options" and start a manual import process.

When publications have been imported, they are automatically exposed through the WordPress REST API. The main endpoint can be found at: https://yoursite.com/wp-json/owc/govpub/v1.

Search publications

Search through all publications. Optionally filter the results by using the parameters below.

Endpoint: /wp-json/owc/openpub/v1/search

Parameters: All parameters are optional. | Parameter | Type | Values | Effect | Default | |--|--|--|--|--| | s | string | | The search query. | "" (empty) | limit | int | | Limit the list of returned publications to the specified amount. | 20 | | page | int | | The page number for multipage results. | 1 | order | string | | The column to sort on. | "date" | orderby | string | "ASC" or "DESC" | The sorting direction. | "DESC" | open_govpub_type | string | | Find publications that are within this type. Expects the type' slug. | "" (empty)

Publication types

Publications are of a certain type. This endpoint exposes the list of available types. Uses WP_Term as storage.

Endpoint: /wp-json/owc/openpub/v1/types

Parameters: All parameters are optional. | Parameter | Type | Values | Effect | Default | |--|--|--|--|--| | return | string | "object", "array", "" | Return all WP_Term data. Omitting this parameter returns a key=>value list of the slug and name. | "" | hide_empty | bool | 0 or 1| Either hide or show empty types. Pass a 1 to show empty types. | 1

Installation

For users

  1. Download the latest release from the releases page
  2. Unzip and move all files to the /wp-content/plugins/open-government-publications directory.
  3. Activate the plugin through the WordPress admin interface
  4. Open the plugin settings page by navigating to "Open Publications" -> "Settings".

An import process should automatically start after an organization on the settings page has been configured. If not, navigate to "Open Publications" -> "Import options" and start a manual import process.

Configuring an actual Cronjob is highly recommended.

For developers

To contribute to this project, you will need to download Composer and NPM.

  1. Clone this repository to your machine and/or WordPress installation
  2. Use Composer (composer install) and NPM (npm i) to install the required dependencies
  3. Run npm run watch to automatically rebuild assest whenever a file changes or run npm run build for a one-off build.

To create an optimized and zipped build, run the package.sh script. This also requires Composer and NPM to run.

Please adhere to the PSR-12 coding standard when adding changes to this plugin. For more information, view the PHP-FIG website.

Changelog

Please see CHANGELOG.md for more information on what has changed recently.

Testing

Please make sure you have installed the dev dependencies and run:

$ composer test
$ composer phplint
$ composer phpcompatibility

This project also uses Psalm for code analysis:

$ composer psalm

Security

If you discover any security related issues, please email s.dekroon@sudwestfryslan.nl instead of using the issue tracker.

Releases

11 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
2.0.11 latest
Jun 2, 2026 4mo ago
open-government-publications.zip
8
May 7, 2026 5mo ago
open-government-publications.zip
2
Jan 16, 2025 1 year ago
open-government-publications.zip
11
Feb 9, 2024 2 years ago
open-government-publications.zip
11
Feb 23, 2023 3 years ago
open-government-publications.zip
29
Oct 13, 2022 4 years ago
open-government-publications.zip
14
Aug 30, 2022 4 years ago
open-government-publications.zip
3
Aug 18, 2022 4 years ago
open-government-publications.zip
9
Aug 18, 2022 4 years ago
open-government-publications.zip
14
Aug 2, 2022 4 years ago
open-government-publications.zip
15
Jul 28, 2022 4 years ago
open-government-publications.zip
14

Active-site estimate ≈10 comes from the median of recent superseded releases. Method.

D+ grade

Security

Open Government Publications 2.0.11 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
2.0.11
Findings
2
Worst severity
high
Content hash
da81c066807ab1ba1bf0f389…

Findings

  • high Any logged-in user can reset settings and mass-delete publications (no capability or nonce)

    missing_capability

    wp_ajax_reset_open_govpub is registered without a nopriv twin, so WordPress only requires a logged-in session. reset_open_govpub_data() never calls current_user_can or wp_verify_nonce/check_ajax_referer. The Reset admin form (views/reset.php) posts to admin-ajax.php with hidden action=reset_open_govpub and no wp_nonce_field; the menu that renders it is manage_options, but the AJAX worker is not. A Subscriber can POST reset=statistics|posts|all: ImportOptions::reset() deletes option open_govpub_options; reset=all also Settings::reset() deletes open_govpub_settings (the creator organization); posts/all run deletePublications() which WP_Query's open_govpub (250 per request) and wp_delete_post($id, true) (bypass trash). That CPT is the public REST catalog, so this wipes the site's official publications and, after reset=all, stops the daily/hourly cron import because creator is empty. The same missing nonce is CSRF: an unauthenticated page can submit the form using any logged-in victim's cookies. POST referer is passed to wp_redirect() (not wp_safe_redirect), so the attacker also gets an open redirect. The file even has a nearby @todo add nonce validation on the admin notice, but the handler itself was left ungated.

    src/Providers/SettingsProvider.php:29,91-157

    Recommendation

    Require current_user_can('manage_options') and check_ajax_referer() (matching a nonce output on the Reset screen) before any reset branch. Replace wp_redirect($referer) with wp_safe_redirect() to admin.php?page=open-govpub-settings. Do not accept an arbitrary POST referer.

  • medium Any logged-in user can trigger the government-publication import job (no capability or nonce)

    missing_capability

    wp_ajax_import_open_govpub maps to import_open_govpub_data() with no current_user_can and no nonce check. Admin JS (assets/dist/js/admin.*.js) POSTs {action: import_open_govpub, checked: 0|1} to the localized ajaxurl and is enqueued on every admin page (admin_enqueue_scripts with no hook_suffix gate), but a Subscriber does not need that script: a raw POST is enough. checked=0 calls check_import_publications() (locks, SRU probe, writes open_govpub_options current_import/total_import); checked=1 calls run_import_publications() which wp_remote_get's the hardcoded overheid.nl SRU endpoints and PublicationService::create/update (wp_insert_post/wp_update_post plus identifier/permalink/search_meta). Cron already schedules those same methods, so this is not catalog destruction, but it is an unprivileged/CSRF-able state change: start or continue a bulk import, mutate catalog posts, and generate outbound HTTP/load. Limited blast versus the reset handler, hence medium.

    src/Providers/ImportProvider.php:47,185-227

    Recommendation

    Require current_user_can('manage_options') and check_ajax_referer() in import_open_govpub_data(). Localize a nonce only on the Import options screen (not every admin page) and send it from admin.js.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.