PHPackages                             wp-media/plugin-family - 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. wp-media/plugin-family

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

wp-media/plugin-family
======================

Organizes and displays WP Media plugin family across other members.

v1.0.9(1mo ago)0470.8k↓39.2%1[3 issues](https://github.com/wp-media/plugin-family/issues)[2 PRs](https://github.com/wp-media/plugin-family/pulls)2GPL-3.0-or-laterPHP

Since Oct 21Pushed 1mo ago4 watchersCompare

[ Source](https://github.com/wp-media/plugin-family)[ Packagist](https://packagist.org/packages/wp-media/plugin-family)[ RSS](/packages/wp-media-plugin-family/feed)WikiDiscussions trunk Synced 2d ago

READMEChangelog (10)Dependencies (14)Versions (20)Used By (2)

Plugin Family
=============

[](#plugin-family)

This package bundles the WP Media plugin collection within a single plugin.

Functionality
-------------

[](#functionality)

This package gathers essential data about each member plugin and provides their installation and activation links, similar to the [Imagify Partner](https://github.com/wp-media/wp-imagify-partner/) package. It returns an installation link for plugins that are not installed, and an activation link for those that are installed but not active. For Imagify, the link generated by the Imagify Partner package is used.

PS: The Imagify Partner package needs be installed along side. refer [here](https://github.com/wp-media/wp-imagify-partner/) for more information.

Installations &amp; Configurations
----------------------------------

[](#installations--configurations)

### Mozart

[](#mozart)

It is strongly advised that this package is loaded using [Mozart](https://github.com/coenjacobs/mozart). This is to avoid package conflicts where the same package is being used in another plugin and loaded from the same namespace. So please, take the pain to install mozart as a development dependency of your plugin: `composer require coenjacobs/mozart --dev`

- After installation, now you are set to configure mozart: see [here](https://github.com/coenjacobs/mozart?tab=readme-ov-file#configuration) or simply refer to how it's done on wp-rocket [here](https://github.com/wp-media/wp-rocket/blob/df52190a44f6b07cd23dd1fa9f6790df0558ef4c/composer.json#L113), there's no shame.
- Lastly setup (post install &amp; update) scripts as done [here](https://github.com/coenjacobs/mozart?tab=readme-ov-file#scripts)

### Package

[](#package)

Now for the package, we need to come back to composer.json file again.

- Remember the `extra` key we added while setting up mozart some minutes ago, Bingo! Add a new property in it like this: `"plugin_domain": "your_text_domain"`. Replace `your_text_domain` with your actual text domain. e.g for WP Rocket, it's `rocket`
- Now again, remember the (post install &amp; update) script we also created, we'll add new properties there also like this:

    ```
    "post-install-cmd": [
        "Mozart\\dep_namespace\\WPMedia\\PluginFamily\\PostInstall::apply_text_domain"
    ],
    "post-update-cmd": [
        "Mozart\\dep_namespace\\WPMedia\\PluginFamily\\PostInstall::apply_text_domain"
    ],
    ```

    Replace `Mozart\\dep_namespace` with the `dep_namespace` you configured for mozart earlier.

    PS: The example above doesn't not take into consideration the mozart scripts. so don't copy directly and overwrite your scripts.
- Finally, install using composer: `composer require wp-media/plugin-family`

Usage Instructions
------------------

[](#usage-instructions)

- Import the model that holds the filtered data into your view class.

```
use WPMedia\PluginFamily\Model\PluginFamily;

class View {
    protected $plugin_family;

    public function __construct( $plugin_family ) {
        $this->plugin_family = $plugin_family;
    }

    public function display_page() {
		$plugin_family = $this->plugin_family->get_filtered_plugins( 'imagify/imagify' );

		$data = [
			'plugin_family' => $plugin_family['uncategorized'],
		];

		$this->print_template( 'page-settings', $data );
	}
}
```

The model returns an array with 2 keys ( categorized &amp; uncategorized ). This for plugins like WP Rocket that needs to display the plugins by category.

- The categorized version has the plugins grouped by their categories.
- The uncategorized version is the reverse of the former.

Next, we need to invoke the controller responsible for managing the installation and activation. This controller has a corresponding interface that needs to be implemented.

```
use WPMedia\PluginFamily\Controller\{ PluginFamily, PluginFamilyInterface };

class Subscriber implements SubscriberInterface, PluginFamilyInterface {

    protected $plugin_family;

    public function __construct( $plugin_family ) {
        $this->plugin_family = $plugin_family;
    }

	public static function get_subscribed_events() {
        $events = PluginFamily::get_subscribed_events();

        return $events;
	}

    public function install_activate() {
        $this->plugin_family->install_activate();
    }

    public function display_error_notice() {
        $this->plugin_family->display_error_notice();
    }
}
```

The methods ( `install_activate` &amp; `display_error_notice` ) are required.

PS: This example is based on the assumption that your plugin utilizes EDA. If EDA is not implemented, you can iterate through the events returned by `PluginFamily::get_subscribed_events()` and use `add_action` accordingly.

Development &amp; Testing
-------------------------

[](#development--testing)

To facilitate development and testing of the package, it is recommended to specify a development branch in the composer.json file of your project.

Taking WP Rocket as example
---------------------------

[](#taking-wp-rocket-as-example)

```
"require": {
    "wp-media/plugin-family": "dev-whatever-dev-branch"
}
```

PS: Always have the dev prefix before the actual branch.

```
"repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/wp-media/plugin-family"
        }
    ]
```

###  Health Score

51

—

FairBetter than 95% of packages

Maintenance90

Actively maintained with recent releases

Popularity37

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 58.3% 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 ~63 days

Recently: every ~75 days

Total

10

Last Release

52d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5564218f7cd2ccf4542a09b7c5436e61e6b370c97fb3b04db1c5bbc0cc67e3c1?d=identicon)[wpmedia](/maintainers/wpmedia)

---

Top Contributors

[![jeawhanlee](https://avatars.githubusercontent.com/u/38788055?v=4)](https://github.com/jeawhanlee "jeawhanlee (7 commits)")[![wordpressfan](https://avatars.githubusercontent.com/u/146129302?v=4)](https://github.com/wordpressfan "wordpressfan (3 commits)")[![Miraeld](https://avatars.githubusercontent.com/u/14993267?v=4)](https://github.com/Miraeld "Miraeld (1 commits)")[![pratikrm](https://avatars.githubusercontent.com/u/30603473?v=4)](https://github.com/pratikrm "pratikrm (1 commits)")

### Embed Badge

![Health badge](/badges/wp-media-plugin-family/health.svg)

```
[![Health](https://phpackages.com/badges/wp-media-plugin-family/health.svg)](https://phpackages.com/packages/wp-media-plugin-family)
```

###  Alternatives

[wp-media/wp-rocket

Performance optimization plugin for WordPress

7531.3M3](/packages/wp-media-wp-rocket)[wp-media/imagify-plugin

Image optimization plugin for WordPress by WP Media.

8067.5k](/packages/wp-media-imagify-plugin)[monsieurbiz/sylius-cms-page-plugin

This plugins allows you to add manage CMS pages using the Rich Editor

44132.6k1](/packages/monsieurbiz-sylius-cms-page-plugin)[wp-media/rocket-lazy-load

Lazy Load images and iframes without jQuery

241.2k](/packages/wp-media-rocket-lazy-load)[the_it_nerd/module-performance

The IT Nerd - Magento 2 Performance Module.

147.6k](/packages/the-it-nerd-module-performance)

PHPackages © 2026

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