Gỡ cài đặt tập lệnh cho plugin trong Multisite


9

Tôi mới nhận ra rằng uninstall.phptệp truyền thống cùng với plugin không hoạt động trong Multisite.

if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

delete_option( 'plugin_option_name' );

Điều này không xóa các tùy chọn trang con trong tất cả wp_SITE-ID_optionscác bảng.

Có một cách tiêu chuẩn để làm điều này?

Câu trả lời:


8

Tìm kiếm bên trong tất cả uninstall.phpcác tệp mà tôi có trong ổ cứng, tôi đã tìm thấy hai tệp có chức năng is_multisite(): Trình soạn thảo vai trò người dùngThêm mã vào đầu .

Cả hai đều sử dụng một $wpdbvòng lặp. Giản thể:

<?php
/**
 * Plugin Uninstall Procedure
 */

// Make sure that we are uninstalling
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

// Leave no trail
$option_name = 'plugin_option_name';

if ( !is_multisite() ) 
{
    delete_option( $option_name );
} 
else 
{
    global $wpdb;
    $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
    $original_blog_id = get_current_blog_id();

    foreach ( $blog_ids as $blog_id ) 
    {
        switch_to_blog( $blog_id );
        delete_option( $option_name );     

        // OR
        // delete_site_option( $option_name );  
    }

    switch_to_blog( $original_blog_id );
}

Hỏi & Đáp liên quan: Gỡ cài đặt, Kích hoạt, Vô hiệu hóa plugin: các tính năng tiêu biểu & cách thực hiện


1
Bạn nên sử dụng restore_current_blogthay vì lưu trữ id blog hiện tại và chuyển lại sau
shea

@bungeshea, vâng, thanh lịch hơn nhiều :) Tôi định chỉnh sửa Câu trả lời nhưng tôi tự hỏi: Multisite uninstall.phpsẽ không chạy luôn từ ID blog == 1?
brasofilo

Bạn chỉ có thể xóa các plugin khỏi bảng điều khiển mạng, trên trang web chính (blog id 1)
shea

Đúng, chắc chắn, và sau tất cả, nó vô nghĩa switch_to_blog(1)khi sử dụng restore_chức năng ... Đừng nhớ chính xác nơi tôi đã đọc một cái gì đó về việc thay đổi ví dụ blog chính ...
brasofilo

Bạn đã kiểm tra điều này kỹ lưỡng? Nhìn vào mã nguồn, có vẻ như uninstall.phptệp trong plugin sẽ chỉ được gọi nếu 1) nó tồn tại trước khi kích hoạt plugin (nếu vậy, tên plugin sẽ được lưu trữ trong bảng tùy chọn của blog); 2) khi gọi get_option('uninstall_plugins')thực sự mang lại plugin cụ thể đó. Nó dường như không hoạt động trên Multisite vì sitemetathay vào đó, thông tin plugin toàn mạng được lưu trữ trong bảng.
Tomas Buteler
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.