升序自定义帖子类型

时间:2014-11-04 作者:user1374796

我正在尝试按升序(而不是默认的降序)对自定义帖子类型进行排序。按如下方式注册帖子类型:

function codex_custom_init() {

  register_post_type(
    \'calendar\', array(
      \'labels\' => array(\'name\' => __( \'Calendar\' ), \'singular_name\' => __( \'Calendar\' ) ),
      \'public\' => true,
      \'has_archive\' => true,
      \'rewrite\' => array(\'slug\' => \'calendar\'),
      \'supports\' => array(\'title\', \'editor\', \'thumbnail\'),
      \'orderby\' => \'date\',
      \'order\' => \'ASC\'
    )
  );                      

}
但出于某种原因\'order\' => \'ASC\' 不起作用吗?这可能是我做错了什么,但有没有办法做到这一点?

2 个回复
最合适的回答,由SO网友:Steven Jones 整理而成

注册post类型时不声明结果的顺序。

而是在请求结果时执行。如果您使用WP\\u Query来获取结果,那么可以将orderby和order参数添加到请求中。

http://codex.wordpress.org/Class_Reference/WP_Query

如果要更改存档页面上结果的顺序,如http://www.yoursite.com/calendar/ 然后,您必须使用pre\\u get\\u posts筛选器筛选现有查询,如下所示:

function wpse_167441_reorder_calendar($query) {
  if ( !is_admin() && $query->is_main_query() ) {

    if (is_post_type_archive(\'calendar\')) {
      $query->set(\'orderby\', \'date\' );
      $query->set(\'order\', \'ASC\' );
    }

  }
}

add_action(\'pre_get_posts\',\'wpse_167441_reorder_calendar\');
如果您希望在管理区域也出现这种情况,那么您可以删除!is\\U管理检查。在执行此操作时,请确保测试您没有影响其他帖子类型-这就是为什么存在is\\u post\\u type\\u归档条件的原因。

http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

希望这就是你想要的。

SO网友:Pieter Goosen

请注意:这只是另一个答案的扩展

正如另一个答案中所提到的,orderbyorder 是否为提供了无效的参数register_post_type

您应该慢慢来,通过上面提供的链接进行工作。

我只是想提出这个,你不能用calender 作为您的帖子类型名称。这是一个reserved name.你will 必须重命名您的自定义帖子类型,您可以使用复数名称,calenders. 您应该通读给出的列表,以确保不将这些名称中的任何一个用作分类法或post类型名称

结束