WordPress:检查是不是安装了插件(ACF)
Posted
技术标签:
【中文标题】WordPress:检查是不是安装了插件(ACF)【英文标题】:WordPress: Check if plugin is installed (ACF)WordPress:检查是否安装了插件(ACF) 【发布时间】:2017-03-28 12:12:31 【问题描述】:如果 ACF 插件已停用或未安装,我想在我的主题中阻止 fatal error
。
插件的主要功能是get_field()
。
我在functions.php
中写了这段代码来检查:
if ( !function_exists('get_field') )
function get_field()
echo '<span>plugin ACF is not installed</span>';
请告诉我这是可以接受的做法吗?
【问题讨论】:
【参考方案1】:ACF 本身使用检查来查看框架是否已加载。如果它已经被另一个插件或主题包含并调用,那么 ACF 将不会再次重新实例化它自己的类。它通过类检查来做到这一点:
if (!class_exists('ACF'))
// The ACF class doesn't exist, so you can probably redefine your functions here
我在我自己的依赖 ACF 存在的插件中完全使用了这一点,因此如果它碰巧被停用,整个网站不会被炸毁。
【讨论】:
【参考方案2】:首先,这不是主要的插件功能,只是其中之一。可能是插件用户在主题中最常用的。另一个是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/
【讨论】:
真的很酷!我永远不会自己想到这一点。现在我将编写质量更好的代码。感谢您的体验!【参考方案3】:是的,这是检查插件功能是否存在的好方法。
你也可以试试is_plugin_active函数来检查插件是否被激活,因为这个函数可以在某处重新声明。
我认为你这样做的主要原因是为了防止致命错误,所以你可以使用哪种方式并不重要。
【讨论】:
ACF 可以作为主题框架或其他插件中的库提供。function_exists()
是一种更安全的检查方式。
正确,但如果是主题框架内的库或其他插件,预计会被主题或其他插件激活。
不,没有必要。如果它作为库或作曲家包提供,它可以用作实际库,通过简单的包含/自动加载加载。在这种情况下,它不会被激活为插件,甚至根本不会在插件中列出。它将被加载,但不是作为活动插件,我一直以这种方式与 Composer 一起使用它。【参考方案4】:
有一个wordpress功能:
is_plugin_active('advanced-custom-fields/acf.php');
【讨论】:
以上是关于WordPress:检查是不是安装了插件(ACF)的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 Wordpress 高级自定义字段插件中的字段组?
自更新 WordPress 和 ACF 插件以来,标签 ACF 'repeater' 不再起作用
php WordPress多个帖子类型查询插件 - 由ACF排序
将 wordpress 元数据导入并转换为 ACF 转发器字段