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


WordPress: Check if plugin is installed (ACF)

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

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

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

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

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

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

我在我自己的插件中就是这样使用的,这些插件依赖于ACF的存在,这样如果它碰巧被禁用,整个网站就不会爆炸。

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

关于定义自定义函数的实践-这很好。但是,我不会在期望ACF字段的每个地方打印长消息-其中一些可能很短(数字),并且此消息将破坏布局。在我看来,越短越好。

同样,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/

有一个wordpress函数:

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

注意:当您更改到插件的高级版本时可能会遇到问题。

是的,这是检查插件函数是否存在的好方法。

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

我认为你这样做的主要原因是为了防止致命错误,所以不管你用什么方法都没关系。