如何重写核心is_ssl()函数?

时间:2013-02-05 作者:ltfishie

我希望重写函数中的函数。php通过主题或插件。具体来说,is\\u ssl(),它没有任何筛选器或操作挂钩。显然,最简单的原因是更新函数。php本身,但这将留下升级和兼容性问题。这怎么可能呢。

编辑:目标是覆盖is\\u ssl()函数,以便在请求标头中设置特定标志时返回true。

是否可以使用override-function?

4 个回复
SO网友:John Blackbourn

如果你看看is_ssl() 功能您将看到它检查各种$_SERVER 变量。因此,您可以尝试将其添加到插件中:

if ( isset( $_SERVER[\'HTTP_MY_CUSTOM_HEADER\'] ) )
  $_SERVER[\'HTTPS\'] = \'on\';
您需要尽早调用该代码,即直接在插件体中而不是在挂钩上调用。

SO网友:s_ha_dum

一旦定义了函数,就不能重写它。这是纯PHP。一些函数被包装在一个条件中,可以让您绕过它pluggable.php. 否则,你就是做不到。您将得到一个致命错误。

解决这个问题的最佳选择可能是child theme 但如果没有太多细节,我就说不出该怎么做,即便如此,成功还是取决于你的“父母”主题有多合作。这可能是写在这样一种方式,使这对你非常困难。

SO网友:dhaupin

没有简单的方法可以做到这一点。。。或者至少不再有大规模采用的方式。命名空间在这里不会真正起作用,每次更新都会删除硬编辑,除非它在配置中(这样做很麻烦)。vQmod是一个角度,但从未用Wordpress尝试过。

插件在该函数之前执行,因此如果您需要其代理/平衡器/SSL支持,那么您可以欺骗$_SERVER[\'HTTPS\'] 未来\'on\'. 如果您要处理多个标头触发器,那么这里的数组合并可能会很好地解决这个问题。

请记住,如果要将其作为插件,请在文件夹和脚本前面加前缀,以便它们在文件列表的顶部排序。示例如下-my-router.php 在中找到-my-router 文件夹破折号将插件排序到顶部,该插件应首先呈现在链中。这是需要的,以防其他插件调用is_ssl() 或者类似的wp_enqueue_style() 在你的插件缓解之前。

SO网友:Will Brownsberger

经过大量的研究,我认为没有很好的答案。

最好的答案是尽早修改$\\u服务器,但并非每个环境都允许您这样做。不幸的是,直接破解是唯一的方法。

这在混淆ssl源的负载平衡器后面是必要的。使用Active Directory身份验证(强制ssl,但将所有结果发送到端口80,非ssl)在Azure中实现Wordpress,我的解决方案是修改is\\U ssl以始终返回true。

结束

相关推荐

Functions.php:从博客中排除类别

所以很明显,如何从模板中排除某些类别,但我不想修改4个模板,使它们忽略某个类别。有没有一种方法可以将某个类别从阅读设置的“博客”集中排除?我正在将博客分配到名为“博客”的页面。。。但显然,档案和搜索也需要对这一超出类别的内容视而不见。我宁愿在里面做functions.php