Cum Să Activezi Plugin-urile Prin Cod?

14 nov. 2010, 14:24:24
Vizualizări: 51.4K
Voturi: 26

Este posibil să activați plugin-urile instalate (adică fișierele care au fost plasate în directorul wp-content/plugins) din alte plugin-uri?

0
Toate răspunsurile la întrebare 6
8
34

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' );
14 nov. 2010 17:40:07
Comentarii

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.

sorich87 sorich87
14 nov. 2010 17:46:29

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

Denis de Bernardy Denis de Bernardy
14 nov. 2010 21:45:43

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.

hakre hakre
15 nov. 2010 00:38:45

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.

Jake Jake
18 sept. 2013 21:21:56

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...

Sagive Sagive
3 iun. 2014 01:24:47

în ce fișier sursă ar trebui să pun acest cod?

Janus Troelsen Janus Troelsen
25 aug. 2016 13:16:08

@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.

unity100 unity100
24 oct. 2018 04:38:27

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.

maryisdead maryisdead
24 apr. 2020 13:44:33
Arată celelalte 3 comentarii
0
14

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.

14 nov. 2010 14:55:57
4

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.

14 nov. 2010 21:14:18
Comentarii

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

Ünsal Korkmaz Ünsal Korkmaz
25 aug. 2012 13:59:53

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.

jerclarke jerclarke
28 aug. 2012 20:48:45

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

Janus Troelsen Janus Troelsen
25 aug. 2016 12:45:34

Adaugă acest cod în functions.php și ar trebui să funcționeze, deși chiar și atunci ar trebui să pui întotdeauna lucrurile în funcții și să le conectezi la "init" sau "wp".

jerclarke jerclarke
26 aug. 2016 17:57:41
2

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');
21 oct. 2016 15:09:12
Comentarii

Ethan, ce e în neregulă cu răspunsul meu?

Mowshon Mowshon
28 oct. 2016 17:59:19

Deși postarea doar a codului este acceptabilă ca răspuns, poate fi greu de interpretat pentru programatorii începători care citesc răspunsul tău. În acest fel, OP poate înțelege mai bine cum funcționează codul tău.

Ethan Rævan Ethan Rævan
29 oct. 2016 00:32:55
0

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.

activează plugin

30 oct. 2019 10:06:34
0

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');
11 oct. 2023 20:19:50