An example WordPress plugin that uses Keygen for site-locked licensing.
Switch branches/tags
Nothing to show
Clone or download
Latest commit cfa7f5e Mar 10, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore initial commit Mar 6, 2018
LICENSE initial commit Mar 6, 2018 initial commit Mar 6, 2018
example-plugin.php fix grammar Mar 10, 2018

Example WordPress Plugin

This is an example of a WordPress plugin that utilizes Keygen for licensing. For this example, each license key will be locked to a specific domain (also referred to as "node-locked" licensing).

This example plugin is not 100% production-ready, but it should get you 90% of the way there. You may need to add additional error handling, machine activation (client-side or server-side), etc.

Running the example

You will need to set up a local WordPress installation on localhost in order for the license to be valid. Simply move the example-plugin.php script into the wp-content/plugins folder and activate the plugin.

Validating a license key

Navigate to the plugin's settings menu. You can use the license key "wp-localhost-key" while on localhost to test a valid license. If you're not on localhost, an error will be shown.


Note: This example assumes that you will create a new machine resource upon license creation, e.g. you require the customer to input the domain(s) they will be using your plugin on during checkout. Otherwise, you will need to set up client-side machine activation, or host your own license activation server.

Configuring a license policy

If you want to utilize your own Keygen account (this example plugin uses our demo account), then visit your dashboard and create a new policy with the following attributes:

  requireFingerprintScope: true,
  maxMachines: 1,
  concurrent: false,
  floating: false,
  protected: true,
  strict: true

You can leave all other attributes to their defaults, but feel free to modify them if needed for your particular licensing model, e.g. change the maxMachines limit, set it to floating = true, etc.


Reach out at if you have any questions or concerns!