問題描述

我想使用 menu order 屬性來控制用於特定目的的自定義帖子型別的排序。

透過 supports => array('page-attributes')將其新增到 CPT 很簡單,但是如何在此 CPT 的管理列表螢幕上公開選單順序值?

最佳解決方案

好的 – 最終證明是相當簡單的 – 因為我有一些心理障礙 – menu_order 是一個變數在 $post 物件 (感謝 @brady 提醒我) 。

@ scribu 的 post on creating sortable column values 然後給其餘的。

因此,假定自定義帖子型別稱為 header_text,這些是需要的函式和鉤子:

為訂單新增新列

/**
* add order column to admin listing screen for header text
*/
function add_new_header_text_column($header_text_columns) {
  $header_text_columns['menu_order'] = "Order";
  return $header_text_columns;
}
add_action('manage_edit-header_text_columns', 'add_new_header_text_column');

渲染列值

/**
* show custom order column values
*/
function show_order_column($name){
  global $post;

  switch ($name) {
    case 'menu_order':
      $order = $post->menu_order;
      echo $order;
      break;
   default:
      break;
   }
}
add_action('manage_header_text_posts_custom_column','show_order_column');

將列設定為可排序

/**
* make column sortable
*/
function order_column_register_sortable($columns){
  $columns['menu_order'] = 'menu_order';
  return $columns;
}
add_filter('manage_edit-header_text_sortable_columns','order_column_register_sortable');

次佳解決方案

它已經太久了,只是為了記錄,您可以在管理員中顯示’menu order’ 選項,只需將’page-attributes’ 包含在’supports’ 選項陣列中即可。例如:

    register_post_type( 'columna',
    array(
        'labels' => array(
            'name' => __( 'Columnas' ),
            'singular_name' => __( 'Columna' ),
        ),
        'supports' => array( 'title', 'thumbnail', 'excerpt', 'page-attributes' ),
        'public' => true,
        'has_archive' => false,
        'menu_position'=>5
    )
);

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。