Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress:检查插件是否已安装(ACF)_Php_Wordpress_Advanced Custom Fields - Fatal编程技术网

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

Php WordPress:检查插件是否已安装(ACF),php,wordpress,advanced-custom-fields,Php,Wordpress,Advanced Custom Fields,如果ACF插件被停用或未安装,我想在我的主题中防止致命错误 该插件的主要功能是get\u field()。 我在functions.php中编写了这段代码来检查: if ( !function_exists('get_field') ) { function get_field() { echo '<span>plugin ACF is not installed</span>'; } } 如果(!function_存在('get_字段')){ 函数ge

如果ACF插件被停用或未安装,我想在我的主题中防止
致命错误

该插件的主要功能是
get\u field()
。 我在
functions.php
中编写了这段代码来检查:

if ( !function_exists('get_field') ) {
  function get_field() {
    echo '<span>plugin ACF is not installed</span>';
  }
}
如果(!function_存在('get_字段')){
函数get_字段(){
echo“未安装插件ACF”;
}
}

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

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

您还可以尝试使用函数检查插件是否被激活,因为函数可以在某个地方重新声明


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

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

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

另外,
函数是否存在
是正确的检查,而不是
插件是否处于活动状态
,因为ACF也可以作为带有主题框架或其他插件的库提供

另一个选择是完全删除前端上的ACF依赖项。您可以使用
get_post_meta()
输出字段的内容,并防止在前端完全加载ACF插件。有关详细信息,请参见以下两篇文章:


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

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

我在依赖ACF存在的插件中使用了这一点,这样,如果它碰巧被停用,整个站点就不会崩溃。

有一个wordpress功能:

插件是否处于活动状态('advanced-custom-fields/acf.php');

ACF可以作为主题框架或其他插件中的库提供<代码>函数_exists()
是一种更安全的检查方法。正确,但如果它是主题框架或其他插件中的库,则预期它将被主题或其他插件激活。不,不需要。如果它是作为库或composer包提供的,那么它可以作为实际库使用,通过简单的include/autoload加载。在这种情况下,它将不会作为插件激活,甚至根本不会列在插件中。它将被加载,但不是作为一个活动插件,我一直用这种方式与作曲家。它真的很酷!我永远不会想到这一点。现在我将编写质量稍好一点的代码。谢谢你的经验!