本文要介紹的是如何解決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版本的啟用動作將是無效的,并給出一個提示:

以上是針對類型的Wordpress插件沖突的解決方案,如果是一般性的插件沖突,最后在禁用自身后給出友好的提示為好,這種情形的話,只需要刪減上述代碼放在你的插件中即可。
WP Youku下載地址:https://wordpress.org/plugins/wp-youku/
簡單介紹:WP Youku可以以在文章/頁面發(fā)布或頁面上編輯器下方輸入欄中直接輸入輸入優(yōu)酷視頻鏈接的方式在該文章/頁面詳情頁面文章內(nèi)容開頭部分上方添加優(yōu)酷視頻,也可以以短代碼的方式調(diào)用,支持iPad/iPhone上播放優(yōu)酷視頻。






文章開頭提到的那個網(wǎng)站鏈接似乎被入侵了,被惡意重定向到色|情網(wǎng)站了,建議盡快移除
經(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');
已更新
隨風(fēng)兄用的什么服務(wù)器啊,速度唰唰的。
倡萌你好,請將
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' );
已修改,不知是否正確
有時候你的網(wǎng)站要翻 墻才能訪問
我的網(wǎng)站無所謂的,只是個記錄,不在乎訪問量,就算是百度K了,也沒關(guān)系的!我已經(jīng)大量使用nofollow了