问题描述

我想使用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。