This is a lightweight alternative to TGM Plugin Activation class, which is currently the best way to require and recommend plugins for WordPress themes (and other plugins), according to the TGMPA homepage.
My code is smaller and more concise, while being extendable and customizable from a design point of view.
Here’s the main function:
<?php
function supernova_register_required_plugins( $plugin_array ) {
$action = 'install-plugin';
foreach ( $plugin_array as $recommended_plugin ) {
$name = $recommended_plugin['name'];
$slug = $recommended_plugin['slug'];
$file = $recommended_plugin['file'];
$link = wp_nonce_url(
add_query_arg(
[
'action' => $action,
'plugin' => $slug,
],
admin_url( 'update.php' )
),
$action . '_' . $slug
);
$status = ' (not installed)';
$button_status = '';
if ( file_exists( WP_PLUGIN_DIR . '/' . $file ) ) {
$status = ( is_plugin_active( $file ) ) ? ' (active)' : ' (inactive)';
$button_status = ( is_plugin_active( $file ) ) ? 'button-active' : 'button-inactive';
}
echo '<a href="' . $link . '" class="button button-secondary ' . $button_status . '">' . $name . $status . '</a> ';
}
}
?>
And here’s the function call inside your plugin or theme settings panel:
<?php
$recommended_plugins = [
[
'name' => 'Yoast SEO',
'slug' => 'wordpress-seo',
'file' => 'wordpress-seo/wp-seo.php',
],
[
'name' => 'CMS Tree Page View',
'slug' => 'cms-tree-page-view',
'file' => 'cms-tree-page-view/index.php',
],
[
'name' => 'Intuitive Custom Post Order',
'slug' => 'intuitive-custom-post-order',
'file' => 'intuitive-custom-post-order/intuitive-custom-post-order.php',
]
];
supernova_register_required_plugins( $recommended_plugins );
?>