Làm thế nào để kích hoạt plugin thông qua mã?


22

Nếu có thể, làm thế nào các plugin được cài đặt (có nghĩa là các tệp đã được đặt trong thư mục wp-content / plugin) được kích hoạt từ các plugin khác?

Câu trả lời:


30

Đây là cách tôi đã làm trong một số ứng dụng web:

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
Như Rarst đã viết, điều này không "an toàn" lắm. Bạn nên đảm bảo các plugin bạn kích hoạt theo cách này an toàn / sẽ không phá vỡ trang web của bạn.
sorich87

10
Thậm chí không an toàn, thậm chí, nhưng quái gì, nếu bạn kích hoạt chúng theo chương trình, bạn phải biết bạn đang làm gì. ;-)
Denis de Bernardy

An toàn sang một bên - ý tôi là, đây không phải là một phần của câu hỏi, phải không? - Tôi thích cách tiếp cận của sorich vì nó gọi các bộ lọc kích hoạt tiêu chuẩn. Vì vậy, các plugin có một sự thay đổi để chạy các thói quen thiết lập của chúng nếu chúng có một số.
hakre

3
Điều này, ít nhất là gần đây, đang phát minh lại bánh xe. Tôi đã sử dụng tích hợp sẵn activate_plugin(), và nó dường như hoạt động tương tự.
Jake

1
@SagiveSEO Nó hoàn toàn an toàn - tương tự như cách WP thực hiện, ngoại trừ bằng cách yêu cầu người dùng nhập / phê duyệt và hình thành nonces và kiểm tra cho các nonces đó - chỉ cần đưa ra các kiểm tra cần thiết để khởi tạo chức năng đó ở bất cứ đâu - để nó có thể được truy cập từ bên ngoài (từ web, v.v.), và nó không thể được gọi ngẫu nhiên theo bất kỳ cách nào.
đoàn kết 100

13

Quá trình kích hoạt plugin được mã hóa để hoạt động với giao diện quản trị WP. Nó thực hiện một số kiểm tra để ngăn chặn các plugin bị lỗi (tải như vậy khi bắt đầu có thể phá vỡ WP).

Nó được xử lý bởi activate_plugin()chức năng ( nguồn ) được ghi nhận là không sử dụng được ở nơi khác.

Vì vậy, nếu bạn muốn kích hoạt plugin bằng mã, mục tiêu tự nó tương đối dễ dàng - để thay đổi active_pluginstùy chọn để bao gồm plugin đó. Nhưng bạn sẽ phải tạo lại các móc kích hoạt có liên quan từ đầu và sẽ có nguy cơ phá vỡ trang web bằng cách kích hoạt mà không có bước hộp cát.


7

Các plugin được lưu trữ trong một mảng trong tùy chọn 'active_plugins'. Mảng chứa đường dẫn tệp đến từng plugin đang hoạt động.

Để kích hoạt một plugin bạn cần xác định đường dẫn của nó là gì, sau đó chuyển đường dẫn đó đến activate_plugin($plugin_path).

Điều này nói thì dễ hơn làm, và (ít nhất là trong 2.9) mã lõi không làm cho nó dễ dàng.

Trước khi bạn có thể kích hoạt_plugin (), bạn cần bao gồm tệp plugin.php từ wp-admin / gồm /. Bạn cũng nên kiểm tra để đảm bảo plugin của bạn chưa hoạt động. Kết quả trông giống như thế này (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);

Tôi sử dụng điều này trong sản xuất trong WP 2.9 và không có vấn đề gì lớn nhưng trong thử nghiệm của tôi, nó đã có kết quả rất bất ngờ với WPMU, vì vậy hãy cẩn thận khi sử dụng cài đặt này trên mạng.


một thời gian dài trôi qua nhưng nếu bạn còn nhớ, kết quả bất ngờ về điều này là gì?
Ünsal Korkmaz

Tôi hoàn toàn không nhớ. Tôi nghĩ rằng nó chỉ không hoạt động và tôi đã làm mọi thứ bằng tay vì tôi không có quá nhiều trang MS.
jerclarke

Làm thế nào để tôi thực hiện điều này? nếu tôi chỉ thực hiện trực tiếp, get_option không được xác định ...
Janus Troelsen

Thêm cái này vào hàm.php và nó sẽ hoạt động, mặc dù sau đó bạn nên luôn đặt mọi thứ vào hàm và nối chúng vào "init" hoặc "wp".
jerclarke

3

Wordpress cung cấp chức năng kích hoạt các plugin, theo 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, có gì sai với câu trả lời của tôi?
Mowshon

Mặc dù chỉ đăng mã là ổn cho một câu trả lời, nhưng có thể khó diễn giải cho bất kỳ lập trình viên mới nào đọc câu trả lời của bạn. Bằng cách này, OP có thể hiểu rõ hơn về cách mã của bạn hoạt động.
Ethan Jinks O'Sullivan

0

Bạn chỉ có thể gọi chức năng mặc định của WordPress.

activate_plugin('akismet/akismet.php');

Vui lòng kiểm tra liên kết dưới đây để biết thêm chi tiết.

kích hoạt plugin

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.