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

Joe*_*Joe 5 php wordpress advanced-custom-fields

我想防止fatal errorACF插件被停用或未安装。

插件的主要功能是get_field()。我在自己的代码中functions.php进行了检查:

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

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

Iho*_*nov 5

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

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

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

另一种选择是完全消除 ACF 对前端的依赖。您可以使用 ACF 插件输出字段内容并get_post_meta()完全阻止 ACF 插件在前端加载。详情请看这两篇帖子:

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

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


ind*_*two 5

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

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

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