【问题标题】:How to avoid a fatal error in case Advanced Custom Fields plugin isn't activated?如果未激活高级自定义字段插件,如何避免致命错误?
【发布时间】:2017-09-04 20:04:20
【问题描述】:

Advanced Custom Fields 文档始终建议使用 <?php if(get_field('repeater_field_name')): ?> 等验证开始任何内容,但当插件未激活时,此行会触发致命错误。如何避免?

【问题讨论】:

    标签: wordpress advanced-custom-fields


    【解决方案1】:

    您可以尝试像这样使用 php 的 function_exists():

    <?php
        if ( function_exists('get_field') && get_field('repeater_field_name') ):
            // do ACF things
        endif;
    ?>
    

    因为 &amp;&amp; is a "short-cut" operator 它会从 L 到 R 进行检查,如果该功能不存在(即插件被禁用),它将退出并立即跳过整个 if 条件,并且永远不会检查是否get_field('repeater_field_name') 评估为真。所以你不能颠倒这两个条件的顺序,否则它仍然无法在插件禁用的情况下工作。

    【讨论】:

    • 谢谢!子问题:您认为这是 ACF 的最佳实践吗?这相对冗长,每次输出一些 ACF 数据时都这样做听起来并不理想。有什么建议吗?
    • 是的,如果您的主题严重依赖 ACF,那么每次检查都没有多大意义。如果网站在没有它的情况下“损坏”,为什么要进行所有这些检查?如果您不想每次都进行检查,有两个建议:1)只在您的主题中包含 ACF 并且不要将其作为插件启用:advancedcustomfields.com/resources/… 或 2)将 ACF 放入 mu-plugins 而不是插件 @987654324 @
    • 实际上将 ACF 包含在主题中对解决这个问题没有任何帮助。
    • 将它包含在主题中保证了当主题可用时 ACF 功能将可用。您最初的问题是关闭 ACF 插件时出现致命错误(因为 get_field 等功能不再可用)。如果您想将它们分开,以便您可以独立打开和关闭 ACF 和您的主题,那么您应该像我上面的答案一样进行检查。
    • // 3. Hide ACF field group menu item add_filter('acf/settings/show_admin', '__return_false'); 在开发过程中去掉这部分。然后将其添加到您的生产站点中,这样您的客户/站点管理员就不会弄乱您的 ACF 结构。
    【解决方案2】:

    您可以使用https://codex.wordpress.org/Function_Reference/is_plugin_active 检查插件是否处于活动状态,但这仅适用于管理端,在前端您必须包含 plugin.php。我认为最干净的解决方案是简单地将这一行替换为您自己的包装函数,例如

    function my_get_field($fld) {
      if function_exists('get_field') return get_field($fld);
      return false; //or whatever value suits your purpose
    }
    

    或者,如果这是临时情况,只需定义自己的虚拟 get_field() 并在不再需要时将其删除。

    【讨论】:

      猜你喜欢
      • 2022-10-09
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 2013-02-10
      • 2012-11-26
      • 2013-12-25
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多