如何解决Wordpress插件冲突的问题

之前有一篇文章介绍了如何判断依附插件是否被启用的问题(例如,在作为WooCommerce扩展的插件中,就要判断当前网站的Woocommerce是否启用了),文章链接:http://suoling.net/is_woocommerce_activated/

现在开始说正事儿:
首先,我们要引入一个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‘
);
        require_once( ABSPATH .
‘wp-admin/includes/plugin.php‘ );
   
}

然后,我们需要在插件中定义Wordpress后台初始化Hook函数,以禁用插件自身,以免网站报错,在这个函数中,我们需要判断当前用户是否可以启用插件,如果可以,那么与该插件冲突的插件是否已经被启用了,如果与该插件冲突的插件被启用了,就报个错误,禁用自身,如果与该插件冲突的是一个该插件的Lite版本,那么可以干脆的禁用掉它,下面以自制插件WP
Youku(相当于Lite版本)和WP Youku Pro(相当于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>
未能启用,可能的原因是您已经启用了<strong>WP Youku
Pro</strong>.</p></div>‘;
      
/*进一步确认不可启用自身*/
       //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‘
);
               
/*禁用该插件对应的Lite版本*/
               
deactivate_plugins(‘wp-youku/wp-youku.php‘
);
               
/*是否禁用自身?作为Pro版插件,在与对应的Lite版冲突的时候,大可不必禁用自身,所以下面注释掉了,当然,也可以加上许可证检查步骤以确定是否禁用掉自身*/
               
//deactivate_plugins( plugin_basename( __FILE__ )
);
           
}
        }
   
}
    function wp_youku_pro_admin_notice()
{
      echo ‘<div
class="error"><p>检测到您已经启用了<strong>WP Youku</strong>,
<strong>WP Youku
Pro</strong>已经禁用了它,请刷新本页面.</p></div>‘;
     
//可以启用自身
      if ( isset( $_GET[‘activate‘] ) )
unset( $_GET[‘activate‘] );
   
}

这样,在先启用Lite版本,后启用Pro版本的时候,会在自动启用Pro版本并禁用自身之后给出提示;在先启用Pro版本,后启用Lite版本的时候,Lite版本的启用动作将是无效的,并给出一个提示:
Wordpress插件冲突的解决办法

WordPress插件冲突的解决办法

以上是针对类型的Wordpress插件冲突的解决方案,如果是一般性的插件冲突,最后在禁用自身后给出友好的提示即可。

如何解决Wordpress插件冲突的问题,布布扣,bubuko.com

时间: 2024-10-08 10:09:55

如何解决Wordpress插件冲突的问题的相关文章

MyEclipse SVN插件冲突导致不能使用解决办法

最近,由于安装插件导致Myeclipse的SVN插件不能使用,出现的问题实在很烦恼,通过试验发现当新安装的插件安装完毕后,只需要把MyEclipse 6.5/eclipse/configuration目录下的org.eclipse.update目录删除即可,并且这个目录在Myeclipse重启之后会重新生成. MyEclipse SVN插件冲突导致不能使用解决办法,布布扣,bubuko.com

解决Vim插件YouCompleteMe和UltiSnips快捷键冲突的问题

废话不表. YCM和UltiSnips默认的快捷键都是Tab键,一起使用会有冲突,so,改键: YCM快捷键: let g:ycm_key_list_select_completion = ['<c-n>', '<Down>']let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>'] UltiSnips快捷键: let g:UltiSnipsExpandTrigger="<tab&g

wordpress插件bug排查后记(这篇文章是写给自己的)

这篇文章是写给自己的. 周三的时候我在维护公司的一个wordpress项目页面时发现了一个非常奇怪的情况:当我尝试更新网站上的一个页面后,在wordpress后台的编辑器中发现其内容并没有按我预期的将图片的网址替换下来(网站开启了百度云插件,插件会抓取文章中的图片,然后将图片上传至百度云,并将文章中的地址替换),但是,我查看前台的页面却发现页面显示时正常的.检查页面中的图片网址也是做过替换的,总之一句话,就是前台文章展示页和后台编辑器中的内容不一致.这个bug真诡异,下面就把排查这个bug的过程

WordPress使用360CDN替换google服务,解决WordPress打开速度变慢问题

由于wordpress新版本中默认使用了一些google服务及google字体,由于google在天朝中的一些你懂的原因,造成wordpress在打开时被拖慢,这时可以用360推出的公共库CDN服务替换掉google的服务,解决网站拖慢的问题. 首先,推荐一款插件“dw replace open sans”,可以替换掉wordpress管理后台的googl服务为360 CDN服务. 下载地址: 官方 百度网盘 对于自定义主题中的google服务引用,可在wordpress管理后台“仪表盘”->“

WordPress插件制作教程(一): 如何创建一个插件

上一篇还是按照之前的教程流程,写了一篇WordPress插件制作教程概述,从这一篇开始就为大家具体讲解WordPress插件制作的内容.这一篇主要说一下插件的创建方法. 相信大家都知道插件的安装文件在什么地方吧,没错就在WP-Content->plugins里面,我们所安装的插件都存放在了这个文件夹里面.当我们刚开始搭建好WordPress网站的时候,里面会默认提供两个插件,一个是Akismet(过滤垃圾评论插件)和一个hello插件(显示歌词的插件).我们可以打开hello.php这个文件,这

WordPress插件:WP No Category Base 去除分类Category目录

不少折腾WordPress的朋友都希望去掉分类链接中的 /category/ 目录标志,网上很多这方面的教程,据倡萌所知,除了使用 WP No Category Base 插件(或类似插件),其他的方法都是不太完美的.WordPress大学目前也去掉了/category/ 目录,使用的正是 WP No Category Base 插件. WP No Category Base 插件功能简单,就是仅仅为了去除 /category/ 目录标志,直接安装,不需要任何设置就可以使用. WP No Cat

Maven 解决JAR包冲突

在JAR 冲突的情况下, 利用Eclipse方式解决JAR包冲突时比较方便简洁的,步骤如下 1. 在Eclipse 中打开pom.xml , 选择  “Dependency  Hierarchy” 2, 在Filter 输入框中,输入冲突的jar,  比如: slf4j 3. 右边会显示所有依赖此包的JAR包 4.  如果你需要排除 冲突, 可以右键单击: 选择  exclude Maven artifact... 进行以上操作后, MAVEN 的依赖关系如下(举列如下:) 排除前: <depe

sbt发布assembly解决jar包冲突问题 deduplicate: different file contents found in the following

一.问题定义 最近在用sbt打assembly包时出现问题,在package的时候,发生jar包冲突/文件冲突问题,两个相同的class来自不同的jar包在classpath内引起冲突. 具体是:我有一个self4j的jar, 还有一个hadoop-common-hdfs的jar包,其中hadoop-common-hdfs.jar内包含了self4j这个jar包,导致冲突. 此类异常一般是由于打包不规范和打包疏忽引起的. (个人认为正确的打包策略是:只打包自己核心功能,不将依赖打包在一起,但是有

算法学习 - HashTable开放地址法解决哈希冲突

开放地址法解决哈希冲突 线性开放地址法 线性开放地址法就是在hash之后,当发现在位置上已经存在了一个变量之后,放到它下一个位置,假如下一个位置也冲突,则继续向下,依次类推,直到找到没有变量的位置,放进去. 平方开放地址法 平方地址法就是在hash之后,当正确位置上存在冲突,不放到挨着的下一个位置,而是放到第2^0位置,假如继续冲突放到2^1的位置,依次2^3... 直到遇到不冲突的位置放进去. 双散列开放地址法 双散列同上,不过不是放到2^的位置,而是放到key - hash(key, tab