Як активувати плагіни за допомогою коду?


22

Якщо можливо, як встановлені плагіни (тобто файли розміщені в каталозі wp-content / plugins) можна активувати з інших плагінів?

Відповіді:


30

Ось як я це робив у деяких веб-додатках:

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
Як писав Рарст, це не дуже "безпечно". Ви повинні переконатися, що плагіни, які ви активуєте таким чином, безпечні / не порушують ваш сайт.
sorich87

10
Навіть не безпечно, але чорт, якщо ви активуєте їх програмно, ви повинні знати, що ви робите. ;-)
Дені де Бернарді

Безпека в бік - Я маю на увазі, це не є частиною питання, правда? - Мені подобається підхід Серіха, оскільки він називає стандартні фільтри активації. Таким чином, плагіни отримують зміну для запуску своїх процедур налаштування, якщо вони є.
хакре

3
Це, принаймні зовсім недавно, винаходить колесо. Я використовував вбудований activate_plugin(), і, здається, працює так само.
Джейк

1
@SagiveSEO Його абсолютно безпечний - схожий з тим, як це робить WP, за винятком того, що вимагає введення / схвалення користувача та формує прикметники та перевіряє їх на предмет - просто введіть необхідні перевірки для запуску цієї функції в будь-якому місці - щоб не можна було отримати доступ ззовні (з веб тощо), і його не можна випадково викликати жодним чином.
єдність100

13

Процес активації плагіна кодується для роботи з інтерфейсом адміністратора WP. Він виконує деякі перевірки, щоб запобігти включенню плагінів з помилками (завантаження таких при запуску може порушити WP).

Він обробляється activate_plugin()функцією ( джерелом ), яка документально підтверджена як непридатна в іншому місці.

Тож якщо ви хочете активувати плагін за кодом, сама мета порівняно проста - змінити active_pluginsваріант, щоб включити цей плагін. Але вам доведеться заново створити пов'язані гачки активації з нуля, і ви ризикуєте зламати сайт, активуючи без кроку пісочниці.


7

Плагіни зберігаються в масиві в опції "active_plugins". Масив містить шлях до файлу до кожного активного плагіна.

Щоб активувати плагін, потрібно визначити, яким буде шлях, а потім пройти цей шлях activate_plugin($plugin_path).

Це простіше сказати, ніж зробити, хоча, і (принаймні, в 2.9) основний код не робить це простим.

Перш ніж ви можете активувати_plugin (), вам потрібно включити файл plugin.php від wp-admin / include /. Слід також перевірити, чи ваш плагін ще не активний. Результат виглядає приблизно так (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);

Я використовую це на виробництві в WP 2.9 і не мав жодних серйозних проблем, але в моєму тестуванні це мало дуже несподівані результати з WPMU, тому будьте обережні, використовуючи це для встановлення в мережі.


давно минув час, але якщо ви пам’ятаєте, який несподіваний результат був на цьому?
Ünsal Korkmaz

Я повністю не пам'ятаю. Я думаю, що це просто не вийшло, і я робив справи вручну, тому що у мене не було занадто багато сайтів MS.
jerclarke

як це виконати? якщо я просто виконую його безпосередньо, get_option не визначено ...
Janus Troelsen

Додайте це в function.php, і воно повинно працювати, хоча навіть тоді ви завжди повинні ставити речі у функції та підключати їх до "init" чи "wp".
jerclarke

3

Wordpress забезпечує функцію активації плагінів, згідно 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');

Етане, що не так з моєю відповіддю?
Mowshon

Хоча для публікації просто коду добре відповідь, може бути важко інтерпретувати будь-яких нових програмістів, які читають вашу відповідь. Таким чином, ОП може краще зрозуміти, як працює ваш код.
Ethan Jinks O'Sullivan

0

Ви можете просто викликати функцію за замовчуванням WordPress.

activate_plugin('akismet/akismet.php');

Будь ласка, перегляньте посилання нижче для отримання більш детальної інформації.

активувати плагін

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.