Jak aktywować wtyczki za pomocą kodu?


22

Jeśli to możliwe, w jaki sposób można aktywować zainstalowane wtyczki (co oznacza, że ​​pliki zostały umieszczone w katalogu wp-content / plugins) z innych wtyczek?

Odpowiedzi:


30

Tak zrobiłem w niektórych aplikacjach internetowych:

function run_activate_plugin( $plugin ) {
    $current = get_option( 'active_plugins' );
    $plugin = plugin_basename( trim( $plugin ) );

    if ( !in_array( $plugin, $current ) ) {
        $current[] = $plugin;
        sort( $current );
        do_action( 'activate_plugin', trim( $plugin ) );
        update_option( 'active_plugins', $current );
        do_action( 'activate_' . trim( $plugin ) );
        do_action( 'activated_plugin', trim( $plugin) );
    }

    return null;
}
run_activate_plugin( 'akismet/akismet.php' );

1
Jak napisał Rarst, nie jest to zbyt „bezpieczne”. Należy upewnić się, że wtyczki aktywowane w ten sposób są bezpieczne / nie spowodują uszkodzenia witryny.
— sorich87

10
W ogóle nie jest to bezpieczne, ale do cholery, jeśli aktywujesz je programowo, powinieneś wiedzieć, co robisz. ;-)
— Denis de Bernardy

Bezpieczeństwo na bok - mam na myśli, że to nie jest część pytania, prawda? - Podoba mi się podejście Soricha, ponieważ wywołuje standardowe filtry aktywacyjne. Wtyczki otrzymują zmianę, aby uruchomić swoje procedury instalacyjne, jeśli takie mają.
— hakre

3
To przynajmniej ostatnio wymyśla koło na nowo. Użyłem wbudowanego activate_plugin()i wydaje się, że działa tak samo.
— Jake

1
@SagiveSEO Jest całkowicie bezpieczny - podobny do tego, w jaki sposób robi to WP, z wyjątkiem wymogu wprowadzania danych przez użytkownika / zatwierdzania i tworzenia jednostek i sprawdzeń dla tych jednostek - wystarczy wprowadzić niezbędne kontrole w celu zainicjowania tej funkcji w dowolnym miejscu - aby nie można było uzyskać do niej dostępu z zewnątrz (z internet itp.) i nie można go w żaden sposób losowo wywołać.
— jedność 100

13

Proces aktywacji wtyczki jest zakodowany do pracy z interfejsem administratora WP. Przeprowadza pewne kontrole, aby zapobiec włączaniu wtyczek z błędami (ładowanie podczas uruchamiania może spowodować uszkodzenie WP).

Jest obsługiwany przez activate_plugin()funkcję ( źródło ), która jest udokumentowana jako bezużyteczna w innym miejscu.

Jeśli więc chcesz aktywować wtyczkę kodem, sam cel jest stosunkowo łatwy - zmienić active_pluginsopcję włączenia tej wtyczki. Ale będziesz musiał ponownie utworzyć powiązane haczyki aktywacyjne od zera i zaryzykować przełamanie witryny przez aktywację bez kroku piaskownicy.


7

Wtyczki są przechowywane w tablicy w opcji „active_plugins”. Tablica zawiera ścieżkę pliku do każdej aktywnej wtyczki.

Aby aktywować wtyczkę, musisz określić jej ścieżkę, a następnie przekazać ją do activate_plugin($plugin_path).

Łatwiej to powiedzieć niż zrobić i (przynajmniej w wersji 2.9) kod podstawowy nie ułatwia.

Aby móc aktywować_plugin (), musisz dołączyć plik plugin.php z wp-admin / obejmuje /. Powinieneś również sprawdzić, czy wtyczka nie jest już aktywna. Wynik wygląda mniej więcej tak (YMMV):

// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins   
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
    return;

// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);

Używam tego podczas produkcji w WP 2.9 i nie miałem żadnych poważnych problemów, ale w moich testach przy WPMU przyniosło to bardzo nieoczekiwane rezultaty, więc uważaj na to przy instalacjach sieciowych.


minęło dużo czasu, ale jeśli pamiętasz, jaki był to nieoczekiwany wynik?
— Ünsal Korkmaz,

Zupełnie nie pamiętam. Myślę, że to po prostu nie działało i robiłem rzeczy ręcznie, ponieważ nie miałem zbyt wielu witryn MS.
— jerclarke

jak to zrobić? jeśli wykonam to bezpośrednio, get_option nie zostanie zdefiniowane ...
— Janus Troelsen,

Dodaj to w functions.php i powinno działać, ale nawet wtedy powinieneś zawsze wstawiać rzeczy do funkcji i podpinać je do „init” lub „wp”.
— jerclarke

3

Wordpress zapewnia funkcję aktywacji wtyczek, zgodnie z 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');

Ethan, co jest nie tak z moją odpowiedzią?
— Mowshon

Chociaż opublikowanie samego kodu jest w porządku dla odpowiedzi, może być trudne do interpretacji dla nowych programistów, którzy czytają twoją odpowiedź. W ten sposób OP może lepiej zrozumieć, jak działa Twój kod.
— Ethan Jinks O'Sullivan

0

Możesz po prostu wywołać domyślną funkcję WordPress.

activate_plugin('akismet/akismet.php');

Proszę sprawdzić poniższy link, aby uzyskać więcej szczegółów.

aktywuj wtyczkę

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.