覆盖WordPress核心函数wp_referer_field

时间:2014-02-20 作者:Ksenia

我想重写核心Wordpress函数wp\\u referer\\u字段,以更改其中$referer\\u字段变量的值。我发现wp\\u referer\\u字段是不可插入的,我需要使用一些其他技术来实现这一点。添加一些筛选器或操作。我试图使用以下代码:

add_filter( \'wp_referer_field\' , \'wp_referer_field_cyrillic\' );
function wp_referer_field_cyrillic( $echo = true ) {
   $referer_field = \'<input type="hidden" name="_my_wp_http_referer" value="\'.urldecode(esc_attr( wp_unslash( $_SERVER[\'REQUEST_URI\'] ) )) . \'" />\';
   if ( $echo )
     echo $referer_field;
   return $referer_field;
}
但它不起作用。看来我做错了什么。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

wp_referer_field 是一个函数。不能将函数视为挂钩。钩子不是这样工作的。也就是说,您不能钩住函数名。钩子是故意创建的。(And there are no hooks built into that function)

其次,按照规则,您根本不能重写函数。WordPress中的一些函数包装在if(function_exists(\'..\')) 有条件的这些都是例外。可以通过创建一个同名的新函数来替换这些函数,但不能“挂钩”到它们中。

如果你想更详细地解释问题,可能还有另一种方法来做你想做的事情。

请参见:

SO网友:Otto

此外,referer值是一个安全字段。如果你随意更改它,你很可能会完全破坏你的网站,因为它是通过表单提交等方式检查的。

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。