問題描述

想知道是否有類或程式設計技術,允許我檢查特定外掛的安裝和啟用,如果沒有安裝外掛,請從 WordPress 的外掛庫中下載?

我有一個外掛,我想要 scribu 的 Post 2 Post 外掛,我想知道如何做到這一點?

最佳解決方案

我會鼓勵反對這個,但我明白你想做什麼,做一些類似的事情。

我怎麼做

我構建依賴於外掛的外掛,依賴於外掛的外掛和依賴於其他外掛的外掛的外掛。如果我控制發展的雙方,我做兩件事情

在其他東西需要的外掛中:

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

在需要其他外掛的外掛/主題中:

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

然後,我新增一個明亮的 「請安裝我的 super-cool 外掛」 通知到管理螢幕的頂部與連結到下載頁面。

這給了我一個確定的方式來檢查我的依賴項是否存在並被安裝。如果外掛已安裝但未啟用,警告仍然顯示。

其他方式

@tollmanz 已經推薦了另一個選項。我不會 copy-paste 他的解決方案,但檢查您的依賴外掛的核心功能的存在是一個偉大的方式來確保它在那裡。

再次,如果外掛安裝但不活動,則此路由將僅檢測其是否處於活動狀態。

為什麼我這樣做

首先,我不喜歡別人的工具下載額外的東西到我的網站。所以我不強迫這個範例給其他使用者。相反,我提示他們下載額外的程式碼,並將它們指向正確的方向。更簡單的方法是與自動化安裝程式配合使用,以便他們可以透過單擊來拉下外掛。

此外,我的程式碼的幾個使用者在伺服器上,他們無法使用 one-click 安裝程式 (或自動下載) 。他們必須安裝 FTP 外掛,所以無聲的 download-and-activate-a-dependency 系統根本無法工作。

最後,如果你正在使用別人的程式碼,那麼當他們釋出新版本 (如果它們引入了錯誤) 或 if they’re hacked 時,你可以對它們進行 0 控制。所以不要自動安裝你不能宣告責任的程式碼。

次佳解決方案

處理類似情況的方法是在外掛依賴關係中查詢核心類或函式,並檢查它是否存在。例如,我構建了一個依賴於簡單術語元外掛的外掛。我檢查了它使用:

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

在我的外掛中,我只是用外掛打包了這個外掛。我只會執行它,如果它還沒有安裝。

您的其他選項將是提示使用者下載外掛並進行安裝。

關於如何自動下載… 我不知道。我會看看 WP 核心如何管理這個,並嘗試從內建系統中收集一些知識。

第三種解決方案

關於 EAMann 的通知想法,您可以在管理員通知中新增一個連結,該連結將管理員新增到新增外掛中的搜尋結果頁面。由於指定的名稱是其結果中首先列出的確切名稱。所有需要的是單擊立即安裝連結。

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="http://'%20.%20$url%20.%20'">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' );

要訪問 current_user_can(),您需要等待外掛載入,因此 plugins_loaded 操作。無論您的站點是否設定為多站點,network_admin_url()將返回正確的 URL 。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。