按带有WP_QUERY的函数的结果排序

时间:2017-08-25 作者:JasCav

我正在尝试按自定义值排序WP\\U查询的结果。具体来说,我想使用name字段,但是name字段将由许多单词组成,这些单词之间用空格隔开。我特别想按名称字段中的最后一个单词排序。

当前,我的查询参数如下:

$args = array(
    \'post_parent\'    => $post->ID,
    \'order\'          => \'ASC\',
    \'orderby\'        => \'name\',
    \'post_type\'      => \'page\',
    \'posts_per_page\' => 8,
    \'paged\'          => get_query_var( \'paged\' ),
    \'meta_key\'       => \'team_school\',
    \'meta_value\'     => $school_type
);
我已经看到了meta_query 但没有任何迹象表明我可以做我想做的事。

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

@Jascawhere有些东西可以让你走上正确的方向。也许有人可以根据需要进行编辑。

// args  
$args = [
   \'post_parent\'    => $post->ID,
   \'post_type\'      => \'page\',
   \'posts_per_page\' => 8,
   \'paged\'          => get_query_var( \'paged\' ),
   \'meta_key\'       => \'team_school\',
   \'meta_value\'     => $school_type,
   \'orderby\'        => \'wpse_last_word\', //<-- make filter for ordering!
   \'order\'          => \'ASC\'
];

// query
$the_query = new WP_Query( $args );


     add_filter( \'posts_orderby\', function( $orderby, \\WP_Query $q )
     {

       if( isset( $args[\'orderby\'] ) && \'wpse_last_word\' === $args[\'orderby\'] )
       { 

       global $wpdb;       
       $orderby = " SUBSTRING_INDEX(  $wpdb->postmeta.meta_value, \' \', -1 ) "; 

       }

       return $orderby;

     }, PHP_INT_MAX, 2 );
引用自https://wordpress.stackexchange.com/a/198624/29133

结束

相关推荐

即使使用元查询,Orderby查询也不适用于自定义字段

我编写了以下查询来获取列表,并希望按升序显示名称列表。我刚才想通过meta_key 和meta_value 作为参数,但它不能正确地进行排序。尝试之后meta_query 我仍然被同样的问题困扰着。$connected = new WP_Query( array( \'connected_type\' => \'posts_to_pages\', \'connected_items\' => get_queried_ob