我想防止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插件。详情请参阅这两篇文章:
有一个wordpress函数:
is_plugin_active('advanced-custom-fields/acf.php');
注意:当您更改到插件的高级版本时可能会遇到问题。
是的,这是检查插件函数是否存在的好方法。
你也可以尝试is_plugin_active function来检查插件是否被激活,因为这个函数可以在某处重新声明。
我认为你这样做的主要原因是为了防止致命错误,所以不管你用什么方法都没关系。