เปลี่ยนลำดับของคอลัมน์ที่กำหนดเองเพื่อแก้ไขแผงควบคุม


27

เมื่อคุณลงทะเบียนคอลัมน์ที่กำหนดเองเช่นนั้น:

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

โดยค่าเริ่มต้นจะปรากฏเป็นรายการสุดท้ายทางด้านขวา ฉันจะเปลี่ยนคำสั่งซื้อได้อย่างไร ถ้าฉันต้องการแสดงคอลัมน์ด้านบนเป็นคอลัมน์แรกหรือคอลัมน์ที่สอง

ขอบคุณล่วงหน้า

คำตอบ:


36

คุณมักจะถามคำถาม PHP แต่ฉันจะตอบเพราะมันอยู่ในบริบทของ WordPress คุณต้องสร้างอาร์เรย์คอลัมน์อีกครั้งโดยแทรกคอลัมน์ของคุณก่อนคอลัมน์ที่คุณต้องการให้เหลือ :

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

ใช่ฉันเดาว่าจะเป็นและวิธีที่ง่ายขึ้น :) แต่ฉันมีความคิดที่ถูกต้องในคำตอบของฉัน ความคิดที่ดี
Bainternet

בנייתאתרים - ฉันเกือบจะเขียนคำตอบของฉันเสร็จแล้วเมื่อคุณตอบคำถามของคุณดังนั้นคำตอบของเรา"ข้ามไปทางจดหมาย"เพื่อที่จะพูด อย่างไรก็ตามมันใช้เวลาพอสมควรที่จะคิดออก แน่นอนว่ามันไม่ได้เกิดขึ้นกับฉันในครั้งแรกที่ฉันต้องการมัน
MikeSchinkel

สิ่งหนึ่งที่ต้องระวัง: จะเกิดอะไรขึ้นถ้ามีปลั๊กอินอื่นลบคอลัมน์ผู้แต่ง คอลัมน์ภาพขนาดย่อของคุณเองก็จะหายไปเช่นกัน คุณสามารถทำตรวจสอบก่อนที่จะกลับisset($new['thumbnail']) $newหากยังไม่ได้ตั้งค่าเพียงต่อท้ายตัวอย่างเช่น
Geert

5

หากคุณมีปลั๊กอินเช่น WPML ซึ่งเพิ่มคอลัมน์โดยอัตโนมัติแม้จะเป็นประเภทโพสต์ที่กำหนดเองคุณอาจมีรหัสที่ซับซ้อนในส่วนหัวของตาราง

คุณไม่ต้องการคัดลอกรหัสไปยังคำจำกัดความคอลัมน์ของคุณ ทำไมทุกคนถึงมีความสำคัญ

เราเพียงต้องการขยายคอลัมน์เริ่มต้นที่จัดรูปแบบและจัดเรียงไว้อย่างดี

อันที่จริงนี่เป็นเพียงเจ็ดบรรทัดของโค้ดและมันทำให้คอลัมน์อื่น ๆ ทั้งหมดไม่เปลี่ยนแปลง

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

หวังว่านี่จะช่วย ..


3

วิธีเดียวที่ฉันรู้วิธีสร้างคอลัมน์ของคุณเอง

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

หวังว่าสิ่งนี้จะช่วย


2

นี่คือการรวมกันของคำตอบ SO สองสามหวังว่าจะช่วยใครบางคน!

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()ทำ.


1
นี่ควรเป็นคำตอบที่ถูกต้อง
xudre
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.