Vytváříte vlastní šablony, děláte na zakázku, nebo publikujete free vzhledy pro redakční systém WordPress? Určitě jste se dostali do situace, kdy jste museli klientovi, nebo komukoliv jinému, kdo chce vaši šablonu použít, že aby se mu ty obrázky hýbali stejně jako na demu, musí si nainstalovat takový a takový plugin. Mám pro vás tip na zajímavou třídu, pomocí které jednoduše rozšíříte funkčnost vaší šablony o upozornění na nutnost instalovat potřebné pluginy.
Třída se jmenuje TGM plugin activation a najdete ji na Github https://github.com/thomasgriffin/TGM-Plugin-Activation.
Pro přidání této funkčnosti nemusíte stahovat zip soubor, ale stačí jen do složky šablony umístit soubor class-tgm-plugin-activation.php. Předpokládám, že většina z vás chce mít v souborech pořádek, tak má v šabloně složku například library, kam takové soubory umísťuje. Na Githubu je také soubor examples, kde je popsána implementace třídy a který si doporučuji projít.
Vložení třídy a nastavení
do souboru functions.php musíme nejprve třídu vložit, proto do něj přidáme následující řádek:
require_once dirname( __FILE__ ) . '/library/class-tgm-plugin-activation.php';
Samozřejmě, pokud máte soubor umístěn jinde, cesta bude odlišná.
Dále musíme zaregistrovat funkci, pomocí které budeme třídu aktivovat:
add_action( 'tgmpa_register', 'my_theme_register_required_plugins' );
Vytvoříme si vlastní funkci:
function my_theme_register_required_plugins() {
}
A do té začneme vkládat potřebné údaje. Jako první vytvoříme pole, do kterého budeme vkládat jednotlivé pluginy:
$plugins = array(
array(
'name'=> 'Ourplugin',
'slug'=> 'ourplugin',
'source'=> get_stylesheet_directory() . '/includes/plugins/our_plugin.zip',
'required'=> true,
'version'=> '',
'force_activation'=> true,
'force_deactivation'=> false,
),
);
- Name je jméno pluginu,
- slug je url pluginu v administraci,
- source je url zip souboru pluginu,
- required znamená, že je plugin vyžadovaný, pokud jej nastavíte na false, bude jen doporučený,
- version – pokud ji vyplníte, bude vyžadována stejná, nebo vyšší verze pluginu,
- force_activation znamená, že plugin je aktivovaný se šablonou a nejde deaktivovat, dokud je šablona aktivní,
- force_deactivation naopak znamená deaktivaci pluginu při deaktivaci šablon.
Celé pole s hodnotami můžete opakovat pro tolik pluginů, kolik budete potřebovat. Podle toho, jaké hodnoty nastavíte, bude se po instalaci šablony zobrazovat upozornění, že jsou pluginy vyžadovány, nebo doporučeny. Dále se také u upozornění zobrazí odkaz na instalaci a aktivaci pluginů, takže uživatel nemusí nic hledat. Díky tomu, že je upozornění stále viditelné, bude uživatel vědět, co má dělat.
Jako poslední krok musíme do funkce přidat ještě konfiguraci, takže pod pole, které jsme si vytvořili přidáme následující řádky:
$theme_text_domain = 'tgmpa';
Textovou doménu pro případný překlad a pole $config které můžete nechat tak jak je a nemusíte na něm nic měnit:
$config = array(
'domain' => $theme_text_domain,
'default_path' => '',
'parent_menu_slug' => 'themes.php',
'parent_url_slug' => 'themes.php',
'menu' => 'install-required-plugins',
'has_notices' => true,
'is_automatic' => false,
'message' => '',
'strings' => array(
'page_title'=> __( 'Install Required Plugins', $theme_text_domain ),
'menu_title'=> __( 'Install Plugins', $theme_text_domain ),
'installing'=> __( 'Installing Plugin: %s', $theme_text_domain ), // %1$s = plugin name
'oops'=> __( 'Something went wrong with the plugin API.', $theme_text_domain ),
'notice_can_install_required'=> _n_noop( 'This theme requires the following plugin: %1$s.',
'This theme requires the following plugins: %1$s.' ),
'notice_can_install_recommended'=> _n_noop( 'This theme recommends the following plugin: %1$s.',
'This theme recommends the following plugins: %1$s.' ),
'notice_cannot_install'=> _n_noop( 'Sorry, but you do not have the correct permissions
to install the %s plugin. Contact the administrator of this site for help on
getting the plugin installed.', 'Sorry, but you do not have the correct permissions
to install the %s plugins. Contact the administrator of this site for
help on getting the plugins installed.' ),
'notice_can_activate_required'=> _n_noop( 'The following required plugin is currently
inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.' ),
'notice_can_activate_recommended'=> _n_noop( 'The following recommended plugin is currently
inactive: %1$s.', 'The following recommended plugins are currently
inactive: %1$s.' ),
'notice_cannot_activate'=> _n_noop( 'Sorry, but you do not have the correct permissions
to activate the %s plugin. Contact the administrator of this site for help on getting the
plugin activated.', 'Sorry, but you do not have the correct permissions to
activate the %s plugins. Contact the administrator of this site for help on
getting the plugins activated.' ),
'notice_ask_to_update'=> _n_noop( 'The following plugin needs to be updated to its latest
version to ensure maximum compatibility with this theme: %1$s.', 'The following plugins
need to be updated to their latest version to ensure maximum compatibility
with this theme: %1$s.' ),
'notice_cannot_update'=> _n_noop( 'Sorry, but you do not have the correct permissions to
update the %s plugin. Contact the administrator of this site for help on getting the
plugin updated.', 'Sorry, but you do not have the correct permissions to update the %s
plugins. Contact the administrator of this site for help on getting
the plugins updated.' ),
'install_link'=> _n_noop( 'Begin installing plugin', 'Begin installing plugins' ),
'activate_link'=> _n_noop( 'Activate installed plugin', 'Activate installed plugins' ),
'return'=> __( 'Return to Required Plugins Installer', $theme_text_domain ),
'plugin_activated'=> __( 'Plugin activated successfully.', $theme_text_domain ),
'complete'=> __( 'All plugins installed and activated successfully. %s', $theme_text_domain ),
'nag_type'=> 'updated'
)
);
Přestože vypadá složitě, jedná se většinou o výpis různých upozornění.
Nakonec vložíme:
tgmpa( $plugins, $config );
Pokud jste vše udělali správně, po aktivaci vaší šablony by se mělo zobrazit upozornění na nutnost instalace definovaných pluginů.