PHPackages                             wpboilerplate/addons-page - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. wpboilerplate/addons-page

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

wpboilerplate/addons-page
=========================

Reusable WordPress Add-ons page with free and paid add-ons support via Freemius.

00

Since Jun 4Compare

[ Source](https://github.com/WPBoilerplate/wpb-addons-page)[ Packagist](https://packagist.org/packages/wpboilerplate/addons-page)[ RSS](/packages/wpboilerplate-addons-page/feed)WikiDiscussions Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

AcrossAI Add-ons Page
=====================

[](#acrossai-add-ons-page)

A reusable Composer package that adds a fully working **Add-ons page** inside WP Admin for any WordPress plugin.

Requirements
------------

[](#requirements)

- PHP 8.1+
- WordPress 6.0+
- `automattic/jetpack-autoloader: ^5.0` in your plugin's `composer.json`

Installation
------------

[](#installation)

```
composer require acrossai-co/addons-page
```

Load the autoloader in your plugin (jetpack-autoloader generates `vendor/autoload_packages.php`):

```
require_once plugin_dir_path( __FILE__ ) . 'vendor/autoload_packages.php';
```

Integration
-----------

[](#integration)

Register a free product in your [Freemius dashboard](https://dashboard.freemius.com) (WordPress Plugin, Analytics only, free plan ON) and grab its **Product ID** and **Public Key**.

Then call the constructor anywhere after your plugin's admin menu is registered (e.g. inside a `plugins_loaded` callback or `define_admin_hooks()`):

```
new \AcrossAI_Addon\AddonsPage(
    'your-plugin-menu-slug', // parent menu slug registered with add_menu_page()
    __FILE__,                // your plugin's main file
    [
        'fs_product_id' => '12345',       // your Freemius product ID
        'fs_public_key' => 'pk_abc123',   // your Freemius public key
        'fs_slug'       => 'your-plugin', // optional — defaults to menu slug
    ]
);
```

Each plugin gets its own Freemius product so activations and analytics are tracked separately per plugin in your dashboard.

The package handles:

- Registering the **Add-ons submenu** under your parent menu slug
- Rendering the add-ons grid (free + paid)
- Installing free add-ons silently (WordPress.org API or GitHub ZIP)
- Paid add-on checkout via Freemius JS popup
- Opt-in / "Login &amp; Connect" flow
- Shared opt-in: if the user opted in via another plugin using this package, the banner is already hidden

Upgrading jetpack-autoloader from v3
------------------------------------

[](#upgrading-jetpack-autoloader-from-v3)

If your plugin currently has `"automattic/jetpack-autoloader": "^3.0"`, bump it to `^5.0`:

```
"automattic/jetpack-autoloader": "^5.0"
```

Then run:

```
composer update automattic/jetpack-autoloader
```

Your existing `vendor/autoload_packages.php` bootstrap call continues to work unchanged.

See [docs/upgrade-notes.md](docs/upgrade-notes.md) for the full migration guide.

readme.txt sections (for wordpress.org submissions)
---------------------------------------------------

[](#readmetxt-sections-for-wordpressorg-submissions)

Copy the blocks from [docs/readme-template.txt](docs/readme-template.txt) into your plugin's `readme.txt`. These sections are **required by wordpress.org**:

- `== Installation ==`
- `== External Services ==`
- `== Privacy Policy ==`

Known limitations
-----------------

[](#known-limitations)

- **Multisite**: not tested or supported in v1. Works on per-site dashboards but network-activated behaviour is undefined.
- **Uninstall edge case**: if you have two plugins using this package and one is *uninstalled* (not just deactivated) while the other is active, Freemius may clear shared opt-in state. Recovery: the user clicks "Login / Connect" on the remaining plugin's Add-ons page.
- **Non-plugin contexts**: instantiating outside a WordPress plugin (theme, mu-plugin, CLI) throws `\RuntimeException`.

License
-------

[](#license)

GPL-2.0-or-later — see [LICENSE.txt](LICENSE.txt).

###  Health Score

9

—

LowBetter than 0% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

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.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/22215595?v=4)[Deepak Gupta](/maintainers/raftaar1191)[@raftaar1191](https://github.com/raftaar1191)

### Embed Badge

![Health badge](/badges/wpboilerplate-addons-page/health.svg)

```
[![Health](https://phpackages.com/badges/wpboilerplate-addons-page/health.svg)](https://phpackages.com/packages/wpboilerplate-addons-page)
```

PHPackages © 2026

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