Adicionar nova coluna à página de sites

4

Estou tentando obter informações na página de sites da minha rede em uma coluna. Abaixo funciona muito bem para pegar o ID do site da rede para cada site.

Como posso fazer com que ele exiba o option_value do item (blog_expire) na coluna option_name na minha tabela blogname_options?

class Add_Blog_ID {
public static function init() {
    $class = __CLASS__ ;
    if ( empty( $GLOBALS[ $class ] ) )
        $GLOBALS[ $class ] = new $class;
}
public function __construct() {
    add_filter( 'wpmu_blogs_columns', array( $this, 'get_id' ) );
    add_action( 'manage_sites_custom_column', array( $this, 'add_columns' ), 10, 2 );
    add_action( 'manage_blogs_custom_column', array( $this, 'add_columns' ), 10, 2 );
    add_action( 'admin_footer', array( $this, 'add_style' ) );
}
public function add_columns( $column_name, $blog_id ) {
    if ( 'blog_id' === $column_name )
        echo $blog_id;
    return $column_name;
}
// Add in a column header
public function get_id( $columns ) {
    $columns['blog_id'] = __('ID');
    return $columns;
}
public function add_style() {
    echo '<style>#blog_id { width:7%; }</style>';
}
}
add_action( 'init', array( 'Add_Blog_ID', 'init' ) );
    
por JonnyPlow 06.10.2011 / 20:43

2 respostas

3

aqui está uma versão modificada da sua classe que deve funcionar:

class Add_Blog_ID {
    public static function init() {
        $class = __CLASS__ ;
        if ( empty( $GLOBALS[ $class ] ) )
            $GLOBALS[ $class ] = new $class;
    }
    public function __construct() {
        add_filter( 'wpmu_blogs_columns', array( $this, 'get_id' ) );
        add_action( 'manage_sites_custom_column', array( $this, 'add_columns' ), 10, 2 );
        add_action( 'manage_blogs_custom_column', array( $this, 'add_columns' ), 10, 2 );
        add_action( 'admin_footer', array( $this, 'add_style' ) );
    }
    public function add_columns( $column_name, $blog_id ) {
        if ( 'blog_id' === $column_name ){
            echo $blog_id;
            //render column value
        }elseif( 'blog_expire' === $column_name ){
            echo get_blog_option($blog_id,'blog_expire',"Default Value To Show if none");
        }
        return $column_name;
    }
    // Add in a column header
    public function get_id( $columns ) {
        $columns['blog_id'] = __('ID');
        //add extra header to table
        $columns['blog_expire'] = __('Blog Expires');

        return $columns;
    }
    public function add_style() {
        echo '<style>#blog_id { width:7%; }</style>';
    }
}
add_action( 'init', array( 'Add_Blog_ID', 'init' ) );
    
por Bainternet 11.10.2011 / 20:45
0

Esta não é uma resposta para a pergunta, mas um recurso extra para JonnyPlow & Código Bainternet.

Eu queria a coluna de identificação no começo, não no final. Isso pode ser conseguido desta maneira:

public function get_id( $columns ) {
    $columns['blog_expire'] = __('Blog Expires');
    $in = array('blog_id' => 'ID');
    $columns = $in + $columns; // array_unshift don't work here, don't ask me why
    return $columns;
}

Mas , se quisermos ajustá-lo e colocá-lo como a segunda (ou terceira) coluna, então um extra função é útil.

  • embora o admin_footer seja inofensivo em outras telas, coloquei o sufixo correto somente para carregar em sites.php
  • como blog_expire não renderizava nada para mim, mudei para template para uma rápida visualização do tema que cada site está usando.
class Add_Blog_ID {
    public static function init() {
        $class = __CLASS__ ;
        if ( empty( $GLOBALS[ $class ] ) )
            $GLOBALS[ $class ] = new $class;
    }
    public function __construct() {
        add_filter( 'wpmu_blogs_columns', array( $this, 'get_id' ) );
        add_action( 'manage_sites_custom_column', array( $this, 'add_columns' ), 10, 2 );
        add_action( 'manage_blogs_custom_column', array( $this, 'add_columns' ), 10, 2 );
        add_action( 'admin_footer-sites.php', array( $this, 'add_style' ) );
    }

    private function array_put_to_position(&$array, $object, $position, $name = null) {
        $count = 0;
        $return = array();
        foreach ($array as $k => $v) {  
                // insert new object
                if ($count == $position) {  
                        if (!$name) $name = $count;
                        $return[$name] = $object;
                        $inserted = true;
                }  
                // insert old object
                $return[$k] = $v;
                $count++;
        }  
        if (!$name) $name = $count;
        if (!$inserted) $return[$name];
        $array = $return;
        return $array;
    }

    public function add_columns( $column_name, $blog_id ) {
        if ( 'blog_id' === $column_name ) {
            echo $blog_id;
            //render column value
        } elseif ( 'template' === $column_name ) {
            echo get_blog_option($blog_id, 'template', "Default Value To Show if none");
        }
        return $column_name;
    }
    // Add in a column header
    public function get_id( $columns ) {
        $columns = $this->array_put_to_position($columns, 'ID', 1, 'blog_id');
        $columns['template'] = __('Using Theme');
        return $columns;
    }

    public function add_style() {
        echo '<style>#blog_id { width:7%; }</style>';
    }
}
add_action( 'init', array( 'Add_Blog_ID', 'init' ) );
    
por brasofilo 16.05.2012 / 19:41