remove_filter( ‘comment_author’, ‘floated_admin_avatar’ ); doesn’t work

In a small plugin I’ve written to add an IP address column to the comments list I want to remove the avatars.
In line 156 I tried to use remove_filter:

remove_filter( 'comment_author', 'floated_admin_avatar', 50 );

Well … I know this function fails sometimes, but why does it fail here?

Read More

My workaround is:

$_GET['comment_status'] == 'spam' 
    and add_filter( 'pre_option_show_avatars', '__return_zero' );

I guess I stared too long at this code to see what went wrong. I need a hint into the right direction.

Related posts

Leave a Reply

2 comments

  1. As usual with hooks this is issue of timing.

    • your init function is hooked to admin load process, which works fine for most things;
    • however in this specific case function is added to filter in constructor of WP_Comments_List_Table class, and object is created in edit-comments.php after admin loader had been processed.

    In my plugin for similar stuff I am removing it at manage_edit-comments_columns hook.

    Simplified example from my class:

    static function on_load() {
    
        add_action( 'admin_init', array( __CLASS__, 'admin_init' ) );
    }
    
    static function admin_init() {
    
            add_filter( 'manage_edit-comments_columns', array( __CLASS__, 'manage_columns' ) );
    }
    
    static function manage_columns( $columns ) {
    
        remove_filter( 'comment_author', 'floated_admin_avatar' );
    
        // stuff
    
        return $columns;
    }