我有一个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。
詹姆斯·卢卡斯乔治·卢卡斯
目前,如果作者的姓氏相同,它会根据发布日期列出作者。
如何根据倒数第二个或倒数第三个单词列出?
最合适的回答,由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 );