WordPress:检查是不是安装了插件(ACF)

Posted

技术标签:

【中文标题】WordPress:检查是不是安装了插件(ACF)【英文标题】:WordPress: Check if plugin is installed (ACF)WordPress:检查是否安装了插件(ACF) 【发布时间】:2017-03-28 12:12:31 【问题描述】:

如果 ACF 插件已停用或未安装,我想在我的主题中阻止 fatal error

插件的主要功能是get_field()。 我在functions.php 中写了这段代码来检查:

if ( !function_exists('get_field') ) 
  function get_field() 
    echo '<span>plugin ACF is not installed</span>';
  

请告诉我这是可以接受的做法吗?

【问题讨论】:

【参考方案1】:

ACF 本身使用检查来查看框架是否已加载。如果它已经被另一个插件或主题包含并调用,那么 ACF 将不会再次重新实例化它自己的类。它通过类检查来做到这一点:

if (!class_exists('ACF')) 
    //  The ACF class doesn't exist, so you can probably redefine your functions here

我在我自己的依赖 ACF 存在的插件中完全使用了这一点,因此如果它碰巧被停用,整个网站不会被炸毁。

【讨论】:

【参考方案2】:

首先,这不是主要的插件功能,只是其中之一。可能是插件用户在主题中最常用的。另一个是the_field(),它实际上打印值(get_field() 返回它)。

关于定义自定义函数的做法 - 很好。但是,我不会在每个需要 ACF 字段的地方打印那么长的消息 - 其中一些可能很短(数字),并且此消息会破坏布局。打印更短的东西更好,imo。

另外,function_exists 是正确的检查,而不是 is_plugin_active,因为 ACF 也可以作为带有主题框架或其他插件的库提供。

另一种选择是完全删除对前端的 ACF 依赖。您可以使用get_post_meta() 输出字段的内容,并防止ACF 插件完全加载到前端。有关详细信息,请参阅这两个帖子:

http://www.billerickson.net/code/disable-acf-frontend/

http://www.billerickson.net/advanced-custom-fields-frontend-dependency/

【讨论】:

真的很酷!我永远不会自己想到这一点。现在我将编写质量更好的代码。感谢您的体验!【参考方案3】:

是的,这是检查插件功能是否存在的好方法。

你也可以试试is_plugin_active函数来检查插件是否被激活,因为这个函数可以在某处重新声明。

我认为你这样做的主要原因是为了防止致命错误,所以你可以使用哪种方式并不重要。

【讨论】:

ACF 可以作为主题框架或其他插件中的库提供。 function_exists() 是一种更安全的检查方式。 正确,但如果是主题框架内的库或其他插件,预计会被主题或其他插件激活。 不,没有必要。如果它作为库或作曲家包提供,它可以用作实际库,通过简单的包含/自动加载加载。在这种情况下,它不会被激活为插件,甚至根本不会在插件中列出。它将被加载,但不是作为活动插件,我一直以这种方式与 Composer 一起使用它。【参考方案4】:

有一个wordpress功能:

is_plugin_active('advanced-custom-fields/acf.php');

【讨论】:

以上是关于WordPress:检查是不是安装了插件(ACF)的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Wordpress 高级自定义字段插件中的字段组?

自更新 WordPress 和 ACF 插件以来,标签 ACF 'repeater' 不再起作用

php WordPress多个帖子类型查询插件 - 由ACF排序

将 wordpress 元数据导入并转换为 ACF 转发器字段

WordPress 插件之Advanced Custom Fields

在 functions.php (WordPress) 中包含 ACF