【问题标题】: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>';
  }
}

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

【问题讨论】:

    标签: php wordpress advanced-custom-fields


    【解决方案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');
      

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 2022-10-17
        • 2011-02-25
        • 2021-11-23
        • 2017-04-13
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多