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