When developing a theme, it is recommended to transfer all the functionality of the theme to plugins.
Create an alert, which after activating the theme will recommend installing our additional plugins. They can be connected from the official directory WordPress or or as a zip file.
A ready-made script TGM Plugin Activation will help us with this , you can download it by following the link http://tgmpluginactivation.com/download/
clean – texdomain our theme
Function Prefix – it is necessary that there were no conflicts with other functions
Clean – name of our theme
Download the generated script
Move languages folder to the /wp-content/themes/youthemename/
Main file of the script class-tgm-plugin-activation.php transfer to a folder /wp-content/themes/youthemename/inc/
In the example.php file we will find an example of connecting a script to our theme. Open the script in any text editor. Edit its contents for yours plugins.
But first we need to connect the script class-tgm-plugin-activation.php to our function.php
This can be done by adding in function.php edited for our needs code from example.php
Example code
require_once get_template_directory() . '/path/to/class-tgm-plugin-activation.php'; add_action( 'tgmpa_register', 'clean_register_required_plugins' ); function clean_register_required_plugins() { /* * Array of plugin arrays. Required keys are name and slug. * If the source is NOT from the .org repo, then source is also required. */ $plugins = array( // This is an example of how to include a plugin bundled with a theme. array( 'name' => 'TGM Example Plugin', // The plugin name. 'slug' => 'tgm-example-plugin', // The plugin slug (typically the folder name). 'source' => get_template_directory() . '/lib/plugins/tgm-example-plugin.zip', // The plugin source. 'required' => true, // If false, the plugin is only 'recommended' instead of required. 'version' => '', // E.g. 1.0.0. If set, the active plugin must be this version or higher. If the plugin version is higher than the plugin version installed, the user will be notified to update the plugin. 'force_activation' => false, // If true, plugin is activated upon theme activation and cannot be deactivated until theme switch. 'force_deactivation' => false, // If true, plugin is deactivated upon theme switch, useful for theme-specific plugins. 'external_url' => '', // If set, overrides default API URL and points to an external URL. 'is_callable' => '', // If set, this callable will be be checked for availability to determine if a plugin is active. ), // This is an example of how to include a plugin from an arbitrary external source in your theme. array( 'name' => 'TGM New Media Plugin', // The plugin name. 'slug' => 'tgm-new-media-plugin', // The plugin slug (typically the folder name). 'source' => 'https://s3.amazonaws.com/tgm/tgm-new-media-plugin.zip', // The plugin source. 'required' => true, // If false, the plugin is only 'recommended' instead of required. 'external_url' => 'https://github.com/thomasgriffin/New-Media-Image-Uploader', // If set, overrides default API URL and points to an external URL. ), // This is an example of how to include a plugin from a GitHub repository in your theme. // This presumes that the plugin code is based in the root of the GitHub repository // and not in a subdirectory ('/src') of the repository. array( 'name' => 'Adminbar Link Comments to Pending', 'slug' => 'adminbar-link-comments-to-pending', 'source' => 'https://github.com/jrfnl/WP-adminbar-comments-to-pending/archive/master.zip', ), // This is an example of how to include a plugin from the WordPress Plugin Repository. array( 'name' => 'BuddyPress', 'slug' => 'buddypress', 'required' => false, ), array( 'name' => 'WordPress SEO by Yoast', 'slug' => 'wordpress-seo', 'is_callable' => 'wpseo_init', ), ); $config = array( 'id' => 'clean', // Unique ID for hashing notices for multiple instances of TGMPA. 'default_path' => '', // Default absolute path to bundled plugins. 'menu' => 'tgmpa-install-plugins', // Menu slug. 'parent_slug' => 'themes.php', // Parent menu slug. 'capability' => 'edit_theme_options', // Capability needed to view plugin install page, should be a capability associated with the parent menu used. 'has_notices' => true, // Show admin notices or not. 'dismissable' => true, // If false, a user cannot dismiss the nag message. 'dismiss_msg' => '', // If 'dismissable' is false, this message will be output at top of nag. 'is_automatic' => false, // Automatically activate plugins after installation or not. 'message' => '', // Message to output right before the plugins table. ); tgmpa( $plugins, $config ); }
In the array $plugins shows an example of plugin connection from the directory of our theme /lib/plugins/tgm-example-plugin.zip
Here he is
array( 'name' => 'TGM Example Plugin', // The plugin name. 'slug' => 'tgm-example-plugin', // The plugin slug (typically the folder name). 'source' => get_template_directory() . '/lib/plugins/tgm-example-plugin.zip', // The plugin source. 'required' => true, // If false, the plugin is only 'recommended' instead of required. 'version' => '', // E.g. 1.0.0. If set, the active plugin must be this version or higher. If the plugin version is higher than the plugin version installed, the user will be notified to update the plugin. 'force_activation' => false, // If true, plugin is activated upon theme activation and cannot be deactivated until theme switch. 'force_deactivation' => false, // If true, plugin is deactivated upon theme switch, useful for theme-specific plugins. 'external_url' => '', // If set, overrides default API URL and points to an external URL. 'is_callable' => '', // If set, this callable will be be checked for availability to determine if a plugin is active. ),
If you need to connect from an external server:
array( 'name' => 'TGM New Media Plugin', // The plugin name. 'slug' => 'tgm-new-media-plugin', // The plugin slug (typically the folder name). 'source' => 'https://s3.amazonaws.com/tgm/tgm-new-media-plugin.zip', // The plugin source. 'required' => true, // If false, the plugin is only 'recommended' instead of required. 'external_url' => 'https://github.com/thomasgriffin/New-Media-Image-Uploader', // If set, overrides default API URL and points to an external URL. ),
If you need to connect from github.com:
array( 'name' => 'Adminbar Link Comments to Pending', 'slug' => 'adminbar-link-comments-to-pending', 'source' => 'https://github.com/jrfnl/WP-adminbar-comments-to-pending/archive/master.zip', ),
And finally, if you need to connect from the WordPress Repository
array( 'name' => 'BuddyPress', 'slug' => 'buddypress', 'required' => false, ),