I'm writing a plugin to display a sortable column on wp-admin/network/sites.php
<?php
/*
Plugin Name: MultiSite SpamColumn
*/
class MultiSiteSpamColumn{
function init(){
if(($_SERVER['PHP_SELF']=='/wp-admin/network/sites.php') && (is_super_admin())){
add_filter( 'wpmu_blogs_columns', array('MultiSiteSpamColumn','register_column') );
add_action( 'manage_sites_custom_column', array('MultiSiteSpamColumn','display_field'), 10, 2 );
add_filter( 'manage_sites-network_sortable_columns', array('MultiSiteSpamColumn','register_sortable_column') );
}
}
function register_column( $columns ) {
$columns[ 'spam' ] = __( 'Spam' );
return $columns;
}
function display_field( $column, $blogid ) {
if ( $column == 'spam' ) {
echo get_blog_status( $blogid, 'spam');
}
}
function register_sortable_column( $columns ) {
$columns[ 'spam' ] = 'spam';
return $columns;
}
}
add_filter( 'init' , array('MultiSiteSpamColumn','init') );
?>
The sortable field finaly shows up, however results are not sorted yet.
I've tried the query, posts_orderby and posts_clauses filters to modify the query but can't get it to work.
A temporary solution I found to make it work is by using a core-hack in wp-admin/includes/class-wp-ms-sites-list-table.php around line 82:
$order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : '';
if ( $order_by == 'registered' ) {
$query .= ' ORDER BY registered ';
} elseif ( $order_by == 'lastupdated' ) {
$query .= ' ORDER BY last_updated ';
} elseif ( $order_by == 'blogname' ) {
if ( is_subdomain_install() )
$query .= ' ORDER BY domain ';
else
$query .= ' ORDER BY path ';
} elseif ( $order_by == 'blog_id' ) {
$query .= ' ORDER BY blog_id ';
//begin hack
} elseif ( $order_by == 'spam' ) {
$query .= ' ORDER BY spam ';
//end hack
} else {
$order_by = null;
}
Any help is appreciated to play safe on future-updates, thanks.