Cum Să Activezi Plugin-urile Prin Cod?
Așa am făcut-o în unele aplicații web:
function run_activate_plugin( $plugin ) {
$plugin = trim( $plugin );
$current = get_option( 'active_plugins' );
$plugin = plugin_basename( $plugin );
if ( !in_array( $plugin, $current ) ) {
$current[] = $plugin;
sort( $current );
do_action( 'activate_plugin', $plugin );
update_option( 'active_plugins', $current );
do_action( 'activate_' . $plugin );
do_action( 'activated_plugin', $plugin );
}
return null;
}
run_activate_plugin( 'akismet/akismet.php' );

După cum a scris Rarst, acest lucru nu este foarte "sigur". Ar trebui să te asiguri că plugin-urile pe care le activezi în acest fel sunt sigure/nu vor afecta funcționarea site-ului tău.

Nu deloc sigur, de fapt, dar hei, dacă le activezi programatic, se presupune că știi ce faci. ;-)

Lăsând la o parte siguranța - adică, asta nu face parte din întrebare, nu? - abordarea lui sorich îmi place pentru că apelează la filtrele standard de activare. Astfel, plugin-urile au ocazia să-și ruleze rutinele de configurare dacă au așa ceva.

Aceasta, cel puțin în ultima vreme, înseamnă a reinventa roata. Am folosit funcția integrată activate_plugin()
și pare să funcționeze la fel.

mi-ar plăcea să știu ce nu este sigur în această soluție, ca să o pot corecta, dar în afară de asta, aceasta este prima soluție care funcționează! mulțumesc...

@SagiveSEO Este perfect sigur - este similar cu modul în care WP o face, cu excepția faptului că necesită input/aprobare de la utilizator și nonces de formular și verificări pentru acele nonces - doar introduce verificările necesare pentru inițierea acelei funcții oriunde - astfel încât să nu poată fi accesată din exterior (de pe web etc), și să nu poată fi apelată aleatoriu în niciun fel.

Las doar un comentariu pentru a fi de acord cu @unity100 și a dezarma aceste comentarii "nu este sigur". Acesta este un mod perfect corect de a face. Este vorba despre unde și cum îl veți folosi, ceea ce poate să-l facă nesigur. Dar asta se aplică la aproape orice bucată de cod pe care o copiați de pe internet.

Procesul de activare a plugin-ului este codificat pentru a funcționa cu interfața de administrare WP. Efectuează unele verificări pentru a preveni activarea plugin-urilor cu erori (încărcarea acestora la pornire poate afecta WP).
Este gestionat de funcția activate_plugin()
(sursă) care este documentată ca inutilizabilă în alte părți.
Deci, dacă doriți să activați un plugin prin cod, scopul în sine este relativ simplu - să modificați opțiunea active_plugins
pentru a include acel plugin. Dar va trebui să recreați de la zero cârligele de activare asociate și veți risca să afectați site-ul prin activare fără etapa de sandbox.

Pluginurile sunt stocate într-un array în opțiunea 'active_plugins'. Array-ul conține calea către fiecare plugin care este activ.
Pentru a activa un plugin, trebuie să determinați care va fi calea sa, apoi să transmiteți acea cale către activate_plugin($plugin_path)
.
Acest lucru este mai ușor de zis decât de făcut, iar (cel puțin în versiunea 2.9) codul de bază nu o face ușor.
Înainte de a putea utiliza activate_plugin(), trebuie să includeți fișierul plugin.php din wp-admin/includes/. De asemenea, ar trebui să verificați dacă pluginul dumneavoastră nu este deja activ. Rezultatul arată cam așa (rezultatele pot varia):
// Definește noul plugin pe care dorești să îl activezi
$plugin_path = '/calea/către/noul/tău/plugin.php';
// Obține pluginurile deja active
$active_plugins = get_option('active_plugins');
// Asigură-te că pluginul tău nu este deja activ
if (isset($active_plugins[$plugin_path]))
return;
// Include fișierul plugin.php pentru a avea acces la funcția activate_plugin()
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activează pluginul tău
activate_plugin($plugin_path);
Folosesc acest cod în producție pe WP 2.9 și nu am întâmpinat probleme majore, dar în teste am avut rezultate foarte neașteptate cu WPMU, așa că fiți precaut când utilizați acest lucru pe instalații de rețea.

a trecut mult timp, dar dacă îți amintești, care a fost rezultatul neașteptat la asta?

Nu îmi amintesc deloc. Cred că pur și simplu nu a funcționat și am făcut lucrurile manual pentru că nu aveam prea multe site-uri MS.

cum execut asta? dacă doar îl execut direct, get_option nu este definit...

WordPress oferă o funcție pentru activarea plugin-urilor, conform WP Codex
function plugin_activation( $plugin ) {
if( ! function_exists('activate_plugin') ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if( ! is_plugin_active( $plugin ) ) {
activate_plugin( $plugin );
}
}
plugin_activation('akismet/akismet.php');

Puteți apela simplu funcția implicită din WordPress.
activate_plugin('akismet/akismet.php');
Vă rugăm să verificați linkul de mai jos pentru mai multe detalii.

Dacă știi numele plugin-urilor, poți folosi funcția activate_plugin() pentru a le activa. În exemplul de mai jos, o folosesc împreună cu hook-ul after_setup_theme, dar poți modifica acest lucru pentru a se potrivi mai bine nevoilor tale.
În acest exemplu, activez plugin-ul WooCommerce:
function activate_mytheme_required_plugins() {
if (!is_plugin_active('woocommerce/woocommerce.php')) {
activate_plugin('woocommerce/woocommerce.php');
}
}
add_action('after_setup_theme', 'activate_mytheme_required_plugins');
