我想使用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');


评论


在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

#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