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

WordPress: Check if plugin is installed (ACF)

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

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

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

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

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

您也可以尝试is_plugin_active函数来检查插件是否激活,因为该函数可以在某处重新声明。

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

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

关于定义自定义函数的做法 - 很好。但是,我不会在每个需要 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/

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

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

我在我自己的依赖于 ACF 存在的插件中正是使用了这个,这样即使它碰巧被停用,整个网站也不会崩溃。

有一个 wordpress 函数:

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