TGM Plugin Activation la clase para recomendar plugins


TGM Plugin Activation es una sencilla libreria en php que nos va a permitir recomendar plugins en temas o en otros plugins.

Alguna vez habréis visto un tema y al instalarlo te recomienda instalar plugins para que puedas usar todas las funcionalidades que trae, pues esta librería lo hace realidad de una forma muy sencilla.

También te permite si son tus propios plugins, subirlos en el tema y que se los instalen desde alli.

 

Hace mucho tiempo que la descubri y aunque era mas sencilla, ahora esta mucho mejor organizada.

url oficial: http://tgmpluginactivation.com/

 

Pasos para hacerla funcionar :

 

Descargar la librería

Cuando la vais a descargar hay un pequeño formulario que te generara un zip, en el formulario tendréis que indicar si queréis usarla en un tema o en un plugin. En esta demostración vamos a hacerla en un tema.

Nos pedirá que rellenemos 3 opciones:

  • Text Domain:   // para la internacionalización
  • Function Prefix: // para generar los nombres de las funciones
  • Name: // nombre del tema.

Es un poco para que cuando te haga el ejemplo te ponga la nomenclatura de las funciones.

 

tgm-configuracion

Descargando el zip

Ya lo tenemos descargado así que vamos a descomprimirlo.

  • languages ( directorio)  aquí guardan los idiomas
  • plugins ( directorio) , esta carpeta es para poner nuestros propios plugins, los que no estén en el repositorio de WordPress
  • class-tgm-plugin-activation.php   clase principal
  • example.php  un ejemplo que utilizaremos para escribir nuestras dependencias.

 

carpeta-con-ficheros-del-plugin-tgm

 

Instalación en el tema

Nos creamos una carpeta que se llame tgm y no vamos a mover todos los ficheros, solo para esta prueba copiaremos en nuestro tema:

  • class-tgm-plugin-activation.php
  • languages
  • plugins // solo si tenemos plugins nuestros que queramos incluir en el tema.
  • example.php // el ejemplo o podemos crearnos nosotros uno

 

4.- Crear clase base

Podemos usar example.php o crearnos una clase como por ejemplo, vamos a crearnos una clase de ejemplo y la vamos a incluir en el functions.php con require.

require get_template_directory() . '/tgm/recomendaciones.php';

 

 

La clase recomendaciones.php

Para crear nuestros recomendados / requeridos , realmente lo que hay que hacer es lo siguiente:

  • requiere_once a la clase principal class-tgm-plugin-activation
  • registrar los plugins

 

Vamos a ver unos ejemplos de como registrar los plugins en diferentes situaciones:

 

Ejemplo para recomendar un plugin del repositorio de WordPress

 

 array(
	'name'        => 'WordPress SEO by Yoast',  // nombre del plugin
	'slug'        => 'wordpress-seo', // normalmente el nombre directorio
	'required'  => true, // obligatorio o recomendado
),

Imaginar que al instalar el tema quereis recomendar varios plugins o que sean obligatorios teneis que declarar

 

Ejemplo para recomendar un plugin de github

 

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',
),

 

Ejemplo para recomendar un plugin dentro de nuestro tema

 

array(
			'name'               => 'TGM Example Plugin', // Nombre del plugin.
			'slug'               => 'tgm-example-plugin', // Normalmente el nombre del directorio.
			'source'             => get_template_directory() . '/tgm/plugins/tgm-example-plugin.zip', // Directorio del zip
			'required'           => true, // obligatorio o recomendado
			'version'            => '', // Para controlar la versión, asi podríamos actualizarlo la siguiente vez que se suba
			'force_activation'   => false, // Si es true, el plugin se activa al activar el tema y no se puede desactivar hasta que cambie de tema
			'force_deactivation' => false, // Si se puede desactivar cuando se cambie de tema.
			'external_url'       => '',
			'is_callable'        => '',
		),

 

Ejemplo para recomendar un plugin de una url

 

array(
	'name'         => 'TGM New Media Plugin', // Nombre del plugin
	'slug'         => 'tgm-new-media-plugin', // Slug suele ser la carpeta
	'source'       => 'https://s3.amazonaws.com/tgm/tgm-new-media-plugin.zip', // Url del zip
	'required'     => true, // recomendado o obligatorio
	'external_url' => '', 
),

 

 

Resultado final de recomendaciones.php

ejemplo-final-tgm

<?php
// incluimos la clase principal
require_once get_template_directory() . '/tgm/class-tgm-plugin-activation.php';

// registramos los plugins que queremos 
add_action( 'tgmpa_register', 'twentysixteen_register_required_plugins' );
function twentysixteen_register_required_plugins() {
	
	$plugins = array(
		// Ejemplo de un plugin en el directorio
		array(
			'name'               => 'TGM Example Plugin', // The plugin name.
			'slug'               => 'tgm-example-plugin', // The plugin slug (typically the folder name).
			'source'             => get_template_directory() . '/tgm/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.
		),
		// Ejemplo de descarga de un plugin desde una url independendiente
		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.
		),
		// ejemplo desde github
		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',
		),
		// Ejemplo de descarga de un plugin del repositorio de WordPress
		array(
			'name'      => 'BuddyPress',
			'slug'      => 'buddypress',
			'required'  => false,
		),
                array(
			'name'        => 'WordPress SEO by Yoast',
			'slug'        => 'wordpress-seo',
			'required'  => true,
		),
		  
		 
	);
	/*
	 * Array of configuration settings. Amend each line as needed.
	 *
	 * TGMPA will start providing localized text strings soon. If you already have translations of our standard
	 * strings available, please help us make TGMPA even better by giving us access to these translations or by
	 * sending in a pull-request with .po file(s) with the translations.
	 *
	 * Only uncomment the strings in the config array if you want to customize the strings.
	 */
	$config = array(
		'id'           => 'twentysixteen',         // 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 );
}