更改编辑面板的自定义列的顺序

时间:2011-02-03 作者:Mirko

当您像这样注册自定义列时:

//Register thumbnail column for au-gallery type
add_filter(\'manage_edit-au-gallery_columns\', \'thumbnail_column\');
function thumbnail_column($columns) {
$columns[\'thumbnail\'] = \'Thumbnail\';
return $columns;
}
默认情况下,它显示为右侧的最后一个。如何更改订单?如果我想将上述列显示为第一列或第二列,该怎么办?

提前谢谢你

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

您基本上是在问一个PHP问题,但我会回答它,因为它是在WordPress的上下文中。你需要rebuild the columns array, inserting your column before the column you want it to be left of:

add_filter(\'manage_posts_columns\', \'thumbnail_column\');
function thumbnail_column($columns) {
  $new = array();
  foreach($columns as $key => $title) {
    if ($key==\'author\') // Put the Thumbnail column before the Author column
      $new[\'thumbnail\'] = \'Thumbnail\';
    $new[$key] = $title;
  }
  return $new;
}

SO网友:user2390733

如果您有像WPML这样的插件,可以自动添加列,甚至可以添加到自定义的post类型,那么您的表头中可能会有复杂的代码。

您不想将代码复制到列定义中。为什么会有人这样做呢。

我们只想扩展已经提供的、格式良好且可排序的默认列。

事实上,这仅仅是七行代码,它保持了所有其他列的完整性。

# hook into manage_edit-<mycustomposttype>_columns
add_filter( \'manage_edit-mycustomposttype_columns\', \'mycustomposttype_columns_definition\' ) ;

# column definition. $columns is the original array from the admin interface for this posttype.
function mycustomposttype_columns_definition( $columns ) {

  # add your column key to the existing columns.
  $columns[\'mycolumn\'] = __( \'Something different\' ); 

  # now define a new order. you need to look up the column 
  # names in the HTML of the admin interface HTML of the table header. 
  #   "cb" is the "select all" checkbox.
  #   "title" is the title column.
  #   "date" is the date column.
  #   "icl_translations" comes from a plugin (in this case, WPML).
  # change the order of the names to change the order of the columns.
  $customOrder = array(\'cb\', \'title\', \'icl_translations\', \'mycolumn\', \'date\');

  # return a new column array to wordpress.
  # order is the exactly like you set in $customOrder.
  foreach ($customOrder as $colname)
    $new[$colname] = $columns[$colname];    
  return $new;
}
希望这有帮助。。

SO网友:Bainternet

我知道的唯一方法是创建自己的列数组

// Add to admin_init function
add_filter(\'manage_edit-au-gallery_columns\', \'add_my_gallery_columns\');

function add_my_gallery_columns($gallery_columns) {
        $new_columns[\'cb\'] = \'<input type="checkbox" />\';

        $new_columns[\'id\'] = __(\'ID\');
        $new_columns[\'title\'] = _x(\'Gallery Name\', \'column name\');
                // your new column somewhere good in the middle
        $new_columns[\'thumbnail\'] = __(\'Thumbnail\');

        $new_columns[\'categories\'] = __(\'Categories\');
        $new_columns[\'tags\'] = __(\'Tags\');
        $new_columns[\'date\'] = _x(\'Date\', \'column name\');

        return $new_columns;
    }
然后像往常一样渲染这些额外添加的列

// Add to admin_init function
    add_action(\'manage_au-gallery_posts_custom_column\', \'manage_gallery_columns\', 10, 2);

    function manage_gallery_columns($column_name, $id) {
        global $wpdb;
        switch ($column_name) {
        case \'id\':
            echo $id;
                break;

        case \'Thumbnail\':
            $thumbnail_id = get_post_meta( $id, \'_thumbnail_id\', true );
                // image from gallery
                $attachments = get_children( array(\'post_parent\' => $post_id, \'post_type\' => \'attachment\', \'post_mime_type\' => \'image\') );
                if ($thumbnail_id)
                    $thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
                elseif ($attachments) {
                    foreach ( $attachments as $attachment_id => $attachment ) {
                        $thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );
                    }
                }
                if ( isset($thumb) && $thumb ) {echo $thumb; } else {echo __(\'None\');}
            break;
        default:
            break;
        } // end switch
}
希望这有帮助

SO网友:DigitalDesignDj

这是几个答案的组合,希望它能帮助一些人!

function array_insert( $array, $index, $insert ) {
    return array_slice( $array, 0, $index, true ) + $insert +
    array_slice( $array, $index, count( $array ) - $index, true);
}

add_filter( \'manage_resource_posts_columns\' , function ( $columns ) {
    return array_insert( $columns, 2, [
        \'image\' => \'Featured Image\'
    ] );
});
我发现了array_splice() 不会像我们需要的那样保留自定义密钥。array_insert()

结束

相关推荐