绝对在页脚中打印脚本

时间:2014-01-25 作者:Chris

我正在寻找一种在WordPress前端的页脚中打印Javascript的解决方案,我知道这是有选择的。然而,如何让我在考虑这些问题时做到这一点:

无论使用何种主题,都将在页脚中打印

  • 无法覆盖
  • 无法删除/过滤
  • 将在3.0-3.8+版本上运行
    • 这将由插件完成。

      期待您的建议。非常感谢。

      我理解这种需求是如何被视为不友好的,但这是将在有限的托管wordpress安装中进行的,并且是一个双方同意的条件。因此,这是防止迁移的合理需要。

    2 个回复
    SO网友:Otto

    无法覆盖

    无法删除/筛选

    这将由插件完成。

    这些是相互排斥的。这样的事情不能由插件或WordPress中的任何其他代码来完成。您需要在Web服务器或PHP级别将代码挂接到其他地方。

    您可以使用PHP。INI指令auto_append_fileauto_prepend_file 强制以用户无法更改的方式包含其他PHP代码。理论上,这可以用来将代码放在页脚中,但不能保证它能处理任何特定的主题,因为它会发生在WordPress上下文之外。

    SO网友:s_ha_dum

    同样,正如我在评论中所说的,我不知道你能百分之百确定地满足所有条件。以下是我认为在WordPress中工作时,您可以获得的最接近的信息。

    使用MU插件wp-content 调用mu-plugins. 该位置中的文件会自动加载,除非删除它们,否则无法禁用,因此您的用户需要某种服务器访问权限--(s)FTP或shell访问权限。这给了你更多的控制。

    其次,WordPress提供了一种从挂钩中删除回调的机制,但您需要知道回调的名称。你可以利用这一事实,至少让它更难移除。

    为此,可以使用匿名类,如下所示:

    class Hard_To_Remove {
      function __construct() {
        add_action(\'wp_footer\',array($this,\'print_to_footer\'));
      }
    
      function print_to_footer() {
        echo \'Hello, I am a footer message\';
      }
    }
    new Hard_To_Remove();
    
    它不容易删除,因为没有简单的方法来引用回调,而按如下方式编写它可以删除。

    class Hard_To_Remove {
      function __construct() {
        add_action(\'wp_footer\',array($this,\'print_to_footer\'));
      }
    
      function print_to_footer() {
        echo \'Hello, I am a footer message\';
      }
    }
    $htr = new Hard_To_Remove();
    
    remove_action(\'wp_footer\',array($htr,\'print_to_footer\'));
    
    闭包也会造成同样的困难。您无法轻松引用回调来删除它。

    add_action(
      \'wp_footer\',
      function() {
        echo \'Hello, I am a footer message\';
      }
    );
    
    但是,您可以通过检查global 变量$wp_filter.

    add_action(
      \'wp_footer\',
      function() {
        global $wp_filter;
        var_dump($wp_filter[\'wp_footer\']);
      }
    );
    
    这可能有点笨拙,但应该可以删除这些过滤器。

    主题总是有可能省略wp_footer() 但这应该相当罕见。

    您可以使用shutdown 钩子,应该始终运行,但它会在结束时打印您的内容</html> 标签

    结束