當(dāng)前位置:首頁>WordPress建站>WordPress開發(fā)>WordPress 功能相近的兩個插件互相沖突的解決辦法

WordPress 功能相近的兩個插件互相沖突的解決辦法

本文要介紹的是如何解決Wordpress插件沖突的問題。

索凌網(wǎng)絡(luò)之前有一篇文章介紹了如何判斷依附插件是否被啟用的問題(例如,在作為WooCommerce擴(kuò)展的插件中,就要判斷當(dāng)前網(wǎng)站的Woocommerce是否啟用了),文章鏈接:http://suoling.net/is_woocommerce_activated/

現(xiàn)在開始說正事兒:

首先,我們要引入一個Wordpress核心文件:

/*  避免 current_user_can 不可用的問題 */
if ( !function_exists( 'wp_get_current_user' ) ) {
	if ( file_exists(ABSPATH.'wp-includes/pluggable.php') ) require_once( ABSPATH.'wp-includes/pluggable.php' );
	if ( file_exists(ABSPATH . 'wp-admin/includes/plugin.php') ) require_once(ABSPATH . 'wp-admin/includes/plugin.php');
}

然后,我們需要在插件中定義Wordpress后臺初始化Hook函數(shù),以禁用插件自身,以免網(wǎng)站報錯。在這個函數(shù)中,我們需要判斷當(dāng)前用戶是否可以啟用插件,如果可以,那么與該插件沖突的插件是否已經(jīng)被啟用了;如果與該插件沖突的插件被啟用了,就報個錯誤,禁用自身;如果與該插件沖突的是一個該插件的Lite版本,那么可以干脆的禁用掉它。下面以自制插件WP Youku(相當(dāng)于Lite版本)和WP Youku Pro(相當(dāng)于Pro版本)來說明問題:

在插件WP Youku中寫:

add_action( 'admin_init', 'wp_youku_deactivate' );
function wp_youku_deactivate() {
    if ( current_user_can( 'activate_plugins' ) ) {
        if( is_plugin_active( 'wp-youku-pro/wp-youku-pro.php' ) ) {
            add_action( 'admin_notices', 'wp_youku_admin_notice' );
            deactivate_plugins( plugin_basename( __FILE__ ) );
            /*在Lite版本的插件中禁用掉Pro版本的插件是不合適的,所以下面我注釋掉了*/
            //deactivate_plugins('wp-youku-pro/wp-youku-pro.php');
        }
    }
}
function wp_youku_admin_notice() {
   echo '<div class="error"><p><strong>WP Youku</strong> 未能啟用,可能的原因是您已經(jīng)啟用了<strong>WP Youku Pro</strong>.</p></div>';
   /*進(jìn)一步確認(rèn)不可啟用自身*/
   //if ( isset( $_GET['activate'] ) ) unset( $_GET['activate'] );
}

在插件WP Youku Pro中寫:

add_action( 'admin_init', 'wp_youku_pro_deactivate' );
function wp_youku_pro_deactivate() {
    if ( current_user_can( 'activate_plugins' ) ) {
        if( is_plugin_active( 'wp-youku/wp-youku.php' ) ) {
             add_action( 'admin_notices', 'wp_youku_pro_admin_notice' );
            /*禁用該插件對應(yīng)的Lite版本*/
            deactivate_plugins('wp-youku/wp-youku.php' );
            /*是否禁用自身?作為Pro版插件,在與對應(yīng)的Lite版沖突的時候,大可不必禁用自身,所以下面注釋掉了,當(dāng)然,也可以加上許可證檢查步驟以確定是否禁用掉自身*/
            //deactivate_plugins( plugin_basename( __FILE__ ) );
        }
    }
}
function wp_youku_pro_admin_notice() {
  echo '<div class="error"><p>檢測到您已經(jīng)啟用了<strong>WP Youku</strong>, <strong>WP Youku Pro</strong>已經(jīng)禁用了它,請刷新本頁面.</p></div>';
  //可以啟用自身
  if ( isset( $_GET['activate'] ) ) unset( $_GET['activate'] );
}

這樣,在先啟用Lite版本,后啟用Pro版本的時候,會在自動啟用Pro版本并禁用自身之后給出提示;在先啟用Pro版本,后啟用Lite版本的時候,Lite版本的啟用動作將是無效的,并給出一個提示:

tenpay138

以上是針對類型的Wordpress插件沖突的解決方案,如果是一般性的插件沖突,最后在禁用自身后給出友好的提示為好,這種情形的話,只需要刪減上述代碼放在你的插件中即可。

WP Youku下載地址:https://wordpress.org/plugins/wp-youku/

簡單介紹:WP Youku可以以在文章/頁面發(fā)布或頁面上編輯器下方輸入欄中直接輸入輸入優(yōu)酷視頻鏈接的方式在該文章/頁面詳情頁面文章內(nèi)容開頭部分上方添加優(yōu)酷視頻,也可以以短代碼的方式調(diào)用,支持iPad/iPhone上播放優(yōu)酷視頻。

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
WordPress開發(fā)

通過 comment_form() 自定義 WordPress 評論表單

2014-5-11 7:15:32

WordPress開發(fā)

WordPress 分頁鏈接函數(shù) paginate_links

2014-6-8 8:09:06

8 條回復(fù) A文章作者 M管理員
  1. 文章開頭提到的那個網(wǎng)站鏈接似乎被入侵了,被惡意重定向到色|情網(wǎng)站了,建議盡快移除

  2. coolwp.net

    經(jīng)過測試:
    首段代碼應(yīng)該是這樣的才對:
    if ( file_exists(ABSPATH.'wp-includes/pluggable.php') ) require_once( ABSPATH.'wp-includes/pluggable.php' );
    if ( file_exists(ABSPATH . 'wp-admin/includes/plugin.php') ) require_once(ABSPATH . 'wp-admin/includes/plugin.php');

    • coolwp.net

      隨風(fēng)兄用的什么服務(wù)器啊,速度唰唰的。

  3. coolwp.net

    倡萌你好,請將 if ( !file_exists(ABSPATH.'wp-includes/pluggable.php') ) require_once( ABSPATH.'wp-includes/pluggable.php' );
    require_once( ABSPATH . 'wp-admin/includes/plugin.php' );

    修改為
    if ( file_exists(ABSPATH.'wp-includes/pluggable.php') ) require_once( ABSPATH.'wp-includes/pluggable.php' );

    • coolwp.net

      我的網(wǎng)站無所謂的,只是個記錄,不在乎訪問量,就算是百度K了,也沒關(guān)系的!我已經(jīng)大量使用nofollow了

?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

内乡县| 五莲县| 三门峡市| 昌平区| 崇阳县| 喀什市| 卢氏县| 洛隆县| 电白县| 平凉市| 利津县| 怀化市| 恩施市| 长白| 杭锦后旗| 东乡| 迭部县| 青河县| 青海省| 大名县| 精河县| 靖边县| 庄浪县| 长兴县| 大同县| 犍为县| 塔河县| 岳池县| 凯里市| 五河县| 南汇区| 徐水县| 陇川县| 枣强县| 临夏县| 瑞安市| 沙湾县| 汉源县| 岐山县| 阳泉市| 富阳市|