在后端按姓氏对自定义帖子类型进行排序

时间:2015-09-07 作者:rudtek

我有一个自定义的帖子类型,叫做speakers, 其中,帖子标题是演讲者的名字。我用以下代码创建了它:

add_action( \'init\', \'create_post_type\' );
function create_post_type() {
  register_post_type( \'speaker\',
    array(
      \'labels\' => array(
        \'name\' => __( \'Speakers\' ),
        \'singular_name\' => __( \'Speaker\' )
      ),
      \'public\' => true,
      \'has_archive\' => true,
    \'supports\' => array(\'title\',\'editor\',\'thumbnail\'),
    )
  );
}
在@birgire的帮助下,我能够在我的wp\\U查询中成功地对这些进行排序,方法是将其添加到functions.php:

function posts_orderby_lastname ($orderby_statement) 
{
  $orderby_statement = "RIGHT(post_title, LOCATE(\' \', REVERSE(post_title)) - 1) ASC";
    return $orderby_statement;
}
然后在我的查询之前添加过滤器。

我的问题是,如何在后端列中按照帖子列表中的姓氏对帖子进行排序。我被告知我需要使用pre_get_posts

我试过这个:

function set_custom_post_types_admin_order($wp_query) {
    if (is_admin()) {

        // Get the post type from the query
        $post_type = $wp_query->query[\'post_type\'];

        if ( $post_type == \'speaker\') {
            if (!isset($_GET[\'orderby\'])) {
                // \'orderby\' value can be any column name
                $wp_query->set(\'orderby\', \'title\');

                // \'order\' value can be ASC or DESC
                $wp_query->set(\'order\', \'ASC\');
            }
        }
    }
}
add_filter(\'pre_get_posts\', \'set_custom_post_types_admin_order\');
它按帖子类型而不是创建日期排序,但我不知道如何按姓氏排序。。。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

如果要覆盖默认值和标题排序,请按标题中的最后一个单词排序。

/**
 * Override default- and title ordering in the backend, for the \'speaker\' custom post type.
 *
 * @link https://wordpress.stackexchange.com/a/202154/26350
 */
add_action( \'pre_get_posts\', function( \\WP_Query $q ) 
{
    if (  
            is_admin() 
         && $q->is_main_query() 
         && \'edit-speaker\' === get_current_screen()->id 
         && ( \'\' === $q->get( \'orderby\' ) || \'title\' === $q->get( \'orderby\' ) )
    ) {
        $q->set( \'orderby\', \'wpse_last_word\' );     
        $q->set( \'order\', \'\' !== $q->get( \'order\' ) ? $q->get( \'order\' ) : \'ASC\' );     
    }
} );
我们使用plugin from our last answer 支持wpse_last_word 订购。

相关推荐

Wp-query Order By problem

我试图根据他们写入查询的顺序对查询进行排序,但它需要按ID排序。可变的$idpaginas打印:20659206262058520618464197481999118520205882126818753205621277188291855121132但查询后,它会打印:1852018520185511875318829。。。。。function LoopMode($atts, $output = null, $my_query = null, $query_args = null) { /