按计算字段排序wp_Query

时间:2016-03-07 作者:dstyle76

嗨,我在做一个商店定位器。我有一个自定义的“诊所”贴子,在那里我保存诊所详细信息(地址,…,lat,lng)。每次发布新诊所时,我都会将post\\U id、lat和lng保存在自定义表“lat\\U lng\\U post”中。

我可以使用filter post\\u搜索特定距离内的诊所,其中以这种方式:

add_filter( \'posts_where\' , \'location_posts_where\' )


    function location_posts_where( $where )
        {
            // $lat  and $ lng are latitude and longitude of the searched point
            global $wpdb;    
            $where .= " AND $wpdb->posts.ID IN (SELECT post_id FROM lat_lng_post 
                 WHERE
                 (6371 * acos( cos( radians(" . $lat . ") )
                  * cos( radians( lat ) )
                  * cos( radians( lng )
                  - radians(" . $lng . ") )
                  + sin( radians(" . $lat . ") )
                  * sin( radians( lat ) ) ) ) <= 150 
                    ORDER BY 
                        ( 6371 * acos( cos( radians(" . $lat . ") )
                  * cos( radians( lat ) )
                  * cos( radians( lng )
                  - radians(" . $lng . ") )
                  + sin( radians(" . $lat . ") )
                  * sin( radians( lat ) ) ) ) ASC)";
                        return $where;
                    }
我在固定距离(150公里)内得到诊所,但没有按距离订购。它们根据发布日期显示。我尝试将orderby设置为none:

$args = array (
    \'post_type\'              => \'clinica\',
    \'orderby\'                => \'none\'

);
但它没有起作用。如何强制按查询中设置的order by规则排序?

1 个回复
SO网友:fostertime

使用WP_Query, 您可以按顺序排列结果meta_value_num:

$args = array (
    \'post_type\' => \'clinica\',
    \'meta_key\'  => \'distance_field_name\',
    \'orderby\'   => \'meta_value_num\',
    \'order\'     => \'DESC\'
);