web-dev-qa-db-fra.com

Ajouter une nouvelle colonne à la page des sites

J'essaie d'obtenir des informations sur la page des sites de mon réseau dans une colonne. La procédure ci-dessous vous permet de récupérer l’ID de site réseau de chaque site.

Comment puis-je lui faire afficher la valeur d'option pour l'élément (blog_expire) dans la colonne option_name de la table 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' ) );
4
JonnyPlow

voici une version modifiée de votre classe qui devrait fonctionner:

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' ) );
3
Bainternet

Ce n'est pas une réponse à la question, mais une fonctionnalité supplémentaire au code JonnyPlow & Bainternet.

Je voulais la colonne ID au début, pas la fin. Ceci peut être réalisé de cette façon:

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;
}

Mais , si nous voulons affiner et le mettre comme seconde (ou troisième) colonne, une fonction supplémentaire est pratique.

  • bien que le admin_footer soit inoffensif sur les autres écrans, je mets le suffixe correct pour le chargement uniquement dans sites.php
  • comme blog_expire ne rendait rien pour moi, je suis passé à template pour un aperçu rapide du thème utilisé par chaque site.
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' ) );
0
brasofilo