如果ACF插件已停用或未安装,我想在我的主题中阻止fatal error
。
插件的主要功能是get_field()
。
我在functions.php
中编写了此代码以检查:
if ( !function_exists('get_field') ) {
function get_field() {
echo '<span>plugin ACF is not installed</span>';
}
}
请告诉我这是可以接受的做法吗?
答案 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');