it-swarm.com.de

Ändern Sie die Reihenfolge der benutzerdefinierten Spalten für Bearbeitungsfelder

Wenn Sie eine benutzerdefinierte Spalte wie folgt registrieren:

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

standardmäßig wird es als das letzte auf der rechten Seite angezeigt. Wie kann ich die Bestellung ändern? Was ist, wenn ich die obige Spalte als erste oder zweite Spalte anzeigen möchte?

Danke im Voraus

26
Mirko

Sie stellen im Grunde eine PHP Frage, aber ich werde sie beantworten, weil sie im Kontext von WordPress steht. Sie müssen das Spaltenarray neu erstellen und Ihre Spalte vor der Spalte einfügen, von der sie übrig bleiben soll :

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

Wenn Sie Plugins wie WPML haben, die automatisch Spalten hinzufügen, auch zu benutzerdefinierten Beitragstypen, enthält Ihr Tabellenkopf möglicherweise komplizierten Code.

Sie möchten den Code nicht in Ihre Spaltendefinition kopieren. Warum sollte das überhaupt jemand tun?.

Wir möchten nur die bereits bereitgestellten, gut formatierten und sortierbaren Standardspalten erweitern.

Tatsächlich sind dies nur sieben Codezeilen, und alle anderen Spalten bleiben intakt.

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

hoffe das hilft..

5
user2390733

ich weiß nur, wie man ein eigenes Array von Spalten erstellt

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

und rendern Sie diese zusätzlichen hinzugefügten Spalten wie gewohnt

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

Hoffe das hilft

3
Bainternet

Dies ist eine Kombination aus ein paar SO Antworten, hoffentlich hilft es jemandem!

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'
    ] );
});

Ich habe festgestellt, dass array_splice() die benutzerdefinierten Schlüssel nicht so beibehält, wie wir es benötigen. array_insert() tut.

1
DigitalDesignDj