menu order
属性来控制将用于特定目的的自定义帖子类型的排序。通过通过
supports => array('page-attributes')
将其添加到CPT很容易,但是我如何公开此CPT的管理员列表屏幕上的菜单订单值?#1 楼
好的-最终结果相当简单-因为我遇到了某种心理障碍-menu_order
是$post
对象中的变量(感谢@brady提醒我)。@scribu的有关创建可排序列值的文章将提供其余内容。
因此,假设自定义文章类型称为
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_header_text_post_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');
#2 楼
太长了,但是仅作记录,您可以在admin中显示“菜单顺序”选项,只需在“ supports”选项数组中包括“ page-attributes”即可。例如: 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
)
);
评论
发布问题的人已经知道“页面属性”。它不能以所需的方式显示页面顺序值。
– s_ha_dum
2012年11月23日23:26
我在自定义帖子类型的支持中具有页面属性,在编辑这些自定义帖子类型之一时,确实向侧边栏添加了菜单顺序,但是在wp admin中查看自定义帖子类型中所有项目的列表时,它没有显示菜单顺序列。还有其他要求才能显示出来吗?在屏幕上列选项下,日期是唯一选项,并且选中该选项。
–cchiera
19-09-20在16:01
@cchiera:您必须遵循接受的答案才能显示该列。仅添加“页面属性”似乎无效。
–lepe
20 Jan 1 '20 at 7:38
#3 楼
@anu让我朝着正确的方向前进,但这不是现代代码。现代解决方案&&在WordPress 5.4上工作
添加支持
注册列
显示列值
使可注册的列可排序/说出应该排序的内容
...
$MY_POST_TYPE = "flowers"; // just for a showcase
// the basic support (menu_order is included in the page-attributes)
add_post_type_support($MY_POST_TYPE, 'page-attributes');
// add a column to the post type's admin
// basically registers the column and sets it's title
add_filter('manage_' . $MY_POST_TYPE . '_posts_columns', function ($columns) {
$columns['menu_order'] = "Order"; //column key => title
return $columns;
});
// display the column value
add_action( 'manage_' . $MY_POST_TYPE . '_posts_custom_column', function ($column_name, $post_id){
if ($column_name == 'menu_order') {
echo get_post($post_id)->menu_order;
}
}, 10, 2); // priority, number of args - MANDATORY HERE!
// make it sortable
$menu_order_sortable_on_screen = 'edit-' . $MY_POST_TYPE; // screen name of LIST page of posts
add_filter('manage_' . $menu_order_sortable_on_screen . '_sortable_columns', function ($columns){
// column key => Query variable
// menu_order is in Query by default so we can just set it
$columns['menu_order'] = 'menu_order';
return $columns;
});
如果您感兴趣,如何将可排序的列设为可排序它不是基于一些基本的Query变量,您将在
request
过滤器周围使用,如此处的文档所述:https://make.wordpress.org/docs/plugin-developer-handbook/10-plugin-components/custom-list-table -columns /#sortable-columns #4 楼
您必须在以下位置注册您的CPT:'hierachical' => true
评论
这不只是允许您在编辑屏幕中为该项指定父项-我已经尝试过了,它与列表屏幕没有区别
–anu
2012年2月29日在20:24
抱歉,没有意识到您想向列表中添加自定义列...也许这给您一个起点:shibashake.com/wordpress-theme/add-custom-post-type-columns
–ungestaltbar
2012年2月29日在20:45
评论
在WP 3.1中,manage_edit-$ {post_type} _columns已由manage _ $ {post_type} _posts_columns取代:Codex
– ptriek
13年5月29日在7:24
真的没有办法将其设置为默认顺序吗?喜欢专页吗?
– Howdy_McGee♦
2013年9月3日在21:13
我更新了代码,以符合@codex报告的WP 3.1+。
–lepe
20 Jan 1 '20 at 7:40