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

27

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

Mirko
quelle

Antworten:

36

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;
}
MikeSchinkel
quelle
Ja, ich denke, das wäre einfacher :), aber ich habe die richtige Idee in meiner Antwort. nettes Denken.
Bainternet
בניית אתרים - Ich war fast fertig damit, meine Antwort zu schreiben, als Sie auf Ihre antworteten. Unsere Antworten sind also sozusagen "in der Post gekreuzt" . Wie dem auch sei, ich habe eine Weile gebraucht, um das herauszufinden. es ist mir sicherlich nicht in den Sinn gekommen, als ich es zum ersten Mal brauchte.
MikeSchinkel
Eines ist zu beachten: Was passiert, wenn ein anderes Plugin die Autorenspalte entfernt hat? Ihre eigene Thumbnail-Spalte würde ebenfalls verschwinden. Sie könnten eine isset($new['thumbnail'])Überprüfung vor der Rückkehr durchführen $new. Wenn es nicht gesetzt ist, hängen Sie es zum Beispiel einfach am Ende an.
Geert
5

Wenn Sie Plugins wie WPML haben, mit denen automatisch Spalten hinzugefügt werden, auch zu benutzerdefinierten Beitragstypen, enthält Ihre Tabellenüberschrift 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 erhalten.

# 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..

user2390733
quelle
3

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

Bainternet
quelle
2

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 bleiben, wie wir es brauchen. array_insert()tut.

DigitalDesignDj
quelle
1
Dies sollte die richtige Antwort sein.
Xudre