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

时间:2016-11-14 18:55:58

标签: php wordpress advanced-custom-fields

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

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

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

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

4 个答案:

答案 0 :(得分:3)

首先,这不是主要的插件功能,只是其中之一。可能是最常用于主题中的插件用户。另一个是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/

答案 1 :(得分:2)

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

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

我在自己的依赖于ACF的插件中使用了此功能,因此,如果碰巧停用了它,整个网站就不会被炸毁。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

有一个 wordpress 功能:

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