按最后一个单词列出帖子标题,然后按倒数第二个

时间:2019-01-21 作者:Rakesh Ojha

我有一个CPT作者,在这里,文章的标题被用作作者的名字。我试图根据姓氏按字母顺序列出作者,这是最有效的。

下面是函数中的代码。php

add_filter( \'posts_orderby\', function( $orderby, \\WP_Query $q )
{
if( \'wpse_last_word\' === $q->get( \'orderby\' ) && $get_order =  $q->get( \'order\' ) )
{
    if( in_array( strtoupper( $get_order ), [\'ASC\', \'DESC\'] ) )
    {
        global $wpdb;
        $orderby = " SUBSTRING_INDEX( {$wpdb->posts}.post_title, \' \', -1 ) " . $get_order;
    }
}
return $orderby;
}, PHP_INT_MAX, 2 ); 
为了对它们进行排序,我在查询之前使用下面的代码

add_filter( \'posts_orderby\' , \'posts_orderby_lastname\' );
我的问题是,两位作者的姓氏相同。如果最后一个/第二个最后一个单词是相同的,我仍然想按字母顺序在第二个或第三个最后一个单词上列出它们。E、 g。

詹姆斯·卢卡斯乔治·卢卡斯

目前,如果作者的姓氏相同,它会根据发布日期列出作者。

如何根据倒数第二个或倒数第三个单词列出?

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

我想我明白了!!!

尝试以下操作:

 $orderby = " SUBSTRING_INDEX( {$wpdb->posts}.post_title, \' \', -1 ) " . $get_order. " , {$wpdb->posts}.post_title " . $get_order;
基本上是在1个查询中按姓氏排序,然后按名字排序。

因此,您的整个代码是:

add_filter( \'posts_orderby\', function( $orderby, \\WP_Query $q )
{
if( \'wpse_last_word\' === $q->get( \'orderby\' ) && $get_order =  $q->get( \'order\' ) )
{
    if( in_array( strtoupper( $get_order ), [\'ASC\', \'DESC\'] ) )
    {
        global $wpdb;

       $orderby = " SUBSTRING_INDEX( {$wpdb->posts}.post_title, \' \', -1 ) " . $get_order. " , {$wpdb->posts}.post_title " . $get_order;
    }
}
return $orderby;
}, PHP_INT_MAX, 2 ); 

相关推荐