PHPackages                             plugin/yard-page-guard - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. plugin/yard-page-guard

ActiveWordpress-plugin

plugin/yard-page-guard
======================

Assign content owners to WordPress pages, allowing them to mark pages as 'verified' and receive automated review reminders based on user-defined dates.

v2.2.0(today)10[3 PRs](https://github.com/yardinternet/yard-page-guard/pulls)EUPL-1.2PHPPHP &gt;=7.4CI failing

Since Oct 11Pushed today2 watchersCompare

[ Source](https://github.com/yardinternet/yard-page-guard)[ Packagist](https://packagist.org/packages/plugin/yard-page-guard)[ Docs](https://www.yard.nl)[ RSS](/packages/plugin-yard-page-guard/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (4)Versions (27)Used By (0)

Yard Page Guard
===============

[](#yard-page-guard)

Description
-----------

[](#description)

Assign content owners to WordPress pages (or other post types), allowing them to mark pages as 'verified' and receive automated review reminders based on user-defined dates.

Installation through `/wp-admin`
--------------------------------

[](#installation-through-wp-admin)

1. Upload [plugin .zip](https://github.com/yardinternet/yard-page-guard/archive/refs/heads/main.zip) through the 'Upload plugin' button
2. Activate the plugin

Installation through Composer
-----------------------------

[](#installation-through-composer)

1. Install this package with Composer:

```
composer require plugin/yard-page-guard

```

2. Activate the plugin through the 'Plugins' menu in WordPress

Security
--------

[](#security)

Access to the metaboxes is granted to all users with the `edit_pages` capability initially. Once an author and content owner are connected to a post object, only these two entities will have access. Besides that, admin roles (see item #3 under the Hooks paragraph) also have access to the metaboxes. As well as the admin overview

Configuration
-------------

[](#configuration)

Add the following constants to `wp-config.php` as needed. All constants fall back to `$_ENV` equivalents.

### Authentication salt

[](#authentication-salt)

Used to sign review tokens. For a cross-site PDC/Pub connection this value must be identical on all connected sites.

```
define('YPG_AUTH_SALT', 'your-secret-salt');
```

Falls back to `$_ENV['YPG_AUTH_SALT']`, then the WordPress core `AUTH_SALT` constant, and then `$_ENV['AUTH_SALT']`.

### External endpoint URLs (Fusion PDC / OpenPub)

[](#external-endpoint-urls-fusion-pdc--openpub)

Required when this site connects to an external Fusion PDC or OpenPub installation.

```
define('OPENPDC_ENDPOINT', 'https://pdc.example.com/');
define('OPENPUB_ENDPOINT', 'https://pub.example.com/');
```

Falls back to `$_ENV['OPENPDC_ENDPOINT']` / `$_ENV['OPENPUB_ENDPOINT']`.

Hooks
-----

[](#hooks)

1. Post types which will have the page guard metaboxes registered:

```
add_filter('yard::page-guard/post-types-to-use', function (array $postTypes): array {
  return array_merge($postTypes, ['custom_post_type']);
});
```

2. Post statuses that will be used to find posts and the associated content owners who need to receive a notification:

```
add_filter('yard::page-guard/post-statusses-to-use', function (array $statuses): array {
  return array_merge($statuses, ['private']);
});
```

3. Roles that are allowed to bypass (in addition to the post author and content owner):

```
add_filter('yard::page-guard/admin-roles', function (array $roles): array {
  return array_merge($roles, ['editor']);
});
```

4. Override the login name of the dummy WordPress user whose admin bar is hidden on the review modal:

```
add_filter('yard::page-guard/review-user-login', function (string $login): string {
  return 'ypg_review_user';
});
```

5. Disable writing content owner information to internal data fields (Fusion Portal, Fusion PDC, Brave/ACF):

```
add_filter('yard::page-guard/enable-internal-data-sync', '__return_false');
```

6. Fires after content owner information has been written to internal data fields:

```
add_action('yard::page-guard/after-internal-data-synced', function (int $postId, string $ownerLink, string $title): void {
  // your code here
}, 10, 3);
```

7. Fires after content owner information has been removed from internal data fields:

```
add_action('yard::page-guard/after-internal-data-removed', function (int $postId): void {
  // your code here
});
```

Local Development
-----------------

[](#local-development)

The scheduled event `ypg_site_cron` is executed once a day, which can make testing a bit difficult. However, you can temporarily alter the code in your local development environment to make testing easier. Inside the `register` method of the `Yard\PageGuard\WPCron\WPCronServiceProvider` class, the event is scheduled as follows:

```
wp_schedule_event($this->timeToExecute(), 'daily', 'ypg_site_cron');
```

To make testing easier, first ensure you use the filter below before scheduling the event:

```
  add_filter('cron_schedules', function ($schedules) {
   $schedules['five_seconds'] = [
    'interval' => 5,
    'display' => '5 seconden',
   ];

   return $schedules;
  });
```

Then schedule the event like this:

```
wp_schedule_event(time(), 'five_seconds', 'ypg_site_cron');
```

The event will be executed every 5 seconds. Make sure your local development environment intercepts the sent emails. Don't forget to configure a post so that a notification is sent to the configured content owner.

About us
--------

[](#about-us)

[![banner](https://raw.githubusercontent.com/yardinternet/.github/refs/heads/main/profile/assets/small-banner-github.svg)](https://www.yard.nl/werken-bij/)

###  Health Score

43

—

FairBetter than 90% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~31 days

Recently: every ~11 days

Total

21

Last Release

0d ago

Major Versions

v1.0.5 → v2.0.02026-02-26

v0.0.1 → v2.2.02026-06-26

PHP version history (2 changes)v1.0.0PHP ^7.4|^8.0

v2.0.5PHP &gt;=7.4

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/62775?v=4)[Anton Zhuravsky](/maintainers/Yard)[@yard](https://github.com/yard)

---

Top Contributors

[![rivanuff](https://avatars.githubusercontent.com/u/16398970?v=4)](https://github.com/rivanuff "rivanuff (72 commits)")[![mvdhoek1](https://avatars.githubusercontent.com/u/11852816?v=4)](https://github.com/mvdhoek1 "mvdhoek1 (12 commits)")[![Rovasch](https://avatars.githubusercontent.com/u/166744617?v=4)](https://github.com/Rovasch "Rovasch (6 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")[![ictbeheer](https://avatars.githubusercontent.com/u/14947039?v=4)](https://github.com/ictbeheer "ictbeheer (2 commits)")

### Embed Badge

![Health badge](/badges/plugin-yard-page-guard/health.svg)

```
[![Health](https://phpackages.com/badges/plugin-yard-page-guard/health.svg)](https://phpackages.com/packages/plugin-yard-page-guard)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
