类、筛选器和回调的问题

时间:2015-05-05 作者:Tetravalente

根据这个Callback example 如果我在类中引用一个方法,我应该使用add\\u filter,通过指定一个包含2个元素的数组,首先是对象,然后是方法。这是我的代码:

add_action (\'login_head\', array(\'Admin\', \'plugin_setup\'));

class Admin 
{
   public function plugin_setup()
   {
      add_filter(\'login_headerurl\', array($this, \'the_logo_url\'));   
   }

   private function the_logo_url()
   {
      return get_bloginfo(\'url\');
   }
不幸的是,除非移动函数,否则我的代码似乎无法工作the_logo_url() 课外活动。解决这个问题的最佳方法是什么?

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

下面是您的代码片段的稍微修改版本:

add_action( \'login_head\', [ \'WPSE_Admin\', \'plugin_setup\' ] );

class WPSE_Admin 
{
   public static function plugin_setup()
   {
      add_filter( \'login_headerurl\', [ \'WPSE_Admin\', \'the_logo_url\' ] );   
   }

   public function the_logo_url()
   {
      return get_bloginfo(\'url\');
   }
}
筛选器回调必须是公共的,而不是私有的。原因是apply_filters()/apply_filters_ref_array() 正在运行call_user_func_array() 在存储的筛选器回调上,在全局$wp_filter 大堆

还要注意,您没有实例化WPSE_Admin 类,因此您不能使用$this. 您可能想使用名称空间,但我只是在这里为类加上前缀。

结束

相关推荐

Search with filters and title

我想搜索custom_post 按标题和ACF字段。所以,我用了WP_Query WordPress函数,但我不能按标题过滤,只能按过滤器过滤。当我提交表单时,我有这样的URL:http://example.com/?s=titre&filter1=condition1&filter2=condition2&filter3=condition3 我的代码:$title = $_GET[\'s\']; $args = array( \'pagenam