Làm thế nào bạn sẽ yêu cầu và tự động tải xuống các plugin phụ thuộc?


7

Tự hỏi liệu có một lớp học hay kỹ thuật lập trình nào cho phép tôi kiểm tra việc cài đặt và kích hoạt một plugin cụ thể không và nếu nói plugin không được cài đặt, để tải xuống từ kho lưu trữ plugin của WordPress?

Tôi có một plugin tôi muốn yêu cầu plugin Post 2 Post của scribu và tôi đã tự hỏi làm thế nào nó có thể được thực hiện?

Câu trả lời:


8

Tôi sẽ khuyến khích chống lại điều này, nhưng tôi hiểu những gì bạn đang cố gắng làm và tự mình làm điều gì đó tương tự.

Làm thế nào tôi làm điều đó

Tôi xây dựng các chủ đề phụ thuộc vào plugin, plugin phụ thuộc vào plugin và plugin phụ thuộc vào plugin phụ thuộc vào plugin khác. Nếu tôi kiểm soát cả hai mặt của sự phát triển, tôi sẽ làm mọi thứ thành hai mảnh ...

Trong plugin sẽ được yêu cầu bởi một cái gì đó khác:

add_filter( 'my-cool-plugin-name-installed', '__return_true' );

Trong plugin / theme sẽ yêu cầu plugin khác :

if ( ! apply_filters( 'my-cool-plugin-name-installed', false ) )
    add_action( 'admin_notices', 'my-cool-plugin-name_not_installed' );

Sau đó, tôi thêm một thông báo "Vui lòng cài đặt plugin siêu mát mẻ" của tôi vào đầu màn hình quản trị với một liên kết đến trang tải xuống.

Điều này cho tôi một cách chắc chắn để kiểm tra xem các phụ thuộc của tôi có tồn tại và được cài đặt không. Nếu plugin được cài đặt nhưng không được kích hoạt, cảnh báo vẫn hiển thị.

Cách khác

Một tùy chọn khác đã được đề xuất bởi @tollmanz. Tôi sẽ không sao chép-dán giải pháp của anh ấy, nhưng kiểm tra sự tồn tại của chức năng cốt lõi của plugin phụ thuộc của bạn là một cách tuyệt vời để đảm bảo rằng nó có ở đó.

Một lần nữa, nếu plugin được cài đặt nhưng không hoạt động, tuyến đường này sẽ chỉ phát hiện nếu nó hoạt động.

Tại sao tôi làm mọi thứ theo cách này

Trước hết, tôi không thích các công cụ của người khác tải thêm nội dung vào trang web của mình. Vì vậy, tôi không ép buộc mô hình đó đối với những người dùng khác. Thay vào đó, tôi nhắc họ tải xuống mã bổ sung và chỉ cho họ đi đúng hướng. Một cách sạch hơn sẽ là liên kết với trình cài đặt tự động để họ có thể kéo plugin xuống chỉ bằng một cú nhấp chuột.

Ngoài ra, một số người dùng mã của tôi đang ở trên các máy chủ nơi họ không thể sử dụng trình cài đặt một lần nhấp (hoặc tải xuống tự động). Họ phải bổ sung FTP để cài đặt chúng, vì vậy một hệ thống phụ thuộc tải xuống và kích hoạt im lặng hoàn toàn không hoạt động.

Cuối cùng, nếu bạn đang làm việc với mã của người khác, bạn có 0 quyền kiểm soát khi họ phát hành bản phát hành mới, nếu họ giới thiệu lỗi hoặc nếu họ bị hack . Vì vậy, đừng tự động cài đặt mã mà bạn không thể yêu cầu trách nhiệm.


Được rồi, bạn làm cho một điểm tốt. Vì vậy, tôi nên thận trọng và yêu cầu sử dụng để cài đặt plugin. Tôi muốn một cách tiếp cận liền mạch hơn và không khiến người dùng lo lắng về sự phụ thuộc. Tôi cũng đã nghĩ về việc chỉ gói trong các plugin khác nhưng sau đó nó sẽ không được cập nhật nếu tôi làm như vậy.
Manny Fleurmond

Cách tiếp cận liền mạch sẽ là kiểm tra sự hiện diện của Post2Post khi bạn kích hoạt plugin của mình và nếu không có, hãy nhắc người dùng tải xuống ngay lập tức trước khi kích hoạt. Tất cả điều này sẽ xảy ra trên một màn hình và họ sẽ không bao giờ cần phải làm lại.
EAMann

5

Phương pháp của tôi để xử lý một tình huống tương tự là tìm kiếm một lớp hoặc hàm cốt lõi trong phần phụ thuộc của plugin và kiểm tra xem nó có tồn tại không. Chẳng hạn, tôi đã xây dựng một plugin phụ thuộc vào plugin Simple Term Meta. Tôi đã kiểm tra nó bằng cách sử dụng:

if(!function_exists('simple_term_meta_install'))
{
    // Do stuff to download plugin
}

Trong plugin của tôi, tôi chỉ đơn giản đóng gói plugin với plugin của mình. Tôi sẽ chỉ chạy nó nếu nó chưa được cài đặt.

Tùy chọn khác của bạn sẽ là nhắc người dùng tải xuống plugin và cài đặt.

Về cách bạn sẽ tải xuống tự động ... Tôi không biết. Tôi sẽ xem cách lõi WP quản lý điều này và cố gắng thu thập một số kiến ​​thức từ hệ thống tích hợp.


3

Theo dõi ý tưởng thông báo của EAMann, bạn có thể thêm một liên kết trong thông báo quản trị viên sẽ đưa quản trị viên đến trang kết quả tìm kiếm trong Thêm Plugin. Vì tên được chỉ định là tên chính xác, nó sẽ được liệt kê đầu tiên trong kết quả. Tất cả những gì cần thiết là nhấp vào liên kết Cài đặt ngay.

function posts_2_posts_required() {
    $url = network_admin_url( 'plugin-install.php?tab=search&type=term&s=Posts+2+Posts&plugin-search-input=Search+Plugins' );
    echo '
    <div class="error">
        <p>The <a href="' . $url . '">Posts 2 Posts Plugin</a> is required.</p>
    </div>
    ';
}

function check_required_plugins() {
    if ( current_user_can( 'activate_plugins' ) ) {
        include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
        if ( ! is_plugin_active( 'posts-2-posts/posts-2-posts.php' ) )
            add_action( 'admin_notices', 'posts_2_posts_required' );
    }
}
add_action( 'plugins_loaded', 'check_required_plugins' );

Để có quyền truy cập vào current_user_can (), bạn cần đợi cho đến khi các plugin được tải, do đó hành động plugins_loaded. Các network_admin_url () sẽ trả lại URL đúng không phân biệt nếu trang web của bạn được thiết lập như nhiều địa điểm hay không.


Đây là một sửa chữa tốt đẹp tuy nhiên bạn nên sử dụng after_setup_themethay plugins_loadedvì bởi vì bạn có thể không sử dụng bất kỳ plugin nào.
fireydude
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.