[英]Wordpress $wp_query with CPT Distance and Featured Orderby
第一次在这里发布; 在这上花了几天的时间,我很亲密,但卡住了。 使用支持不佳的主题,该主题与我们所有的自定义设置都非常有效。 它用于企业目录网站。 主题包括“精选”放置,以更改格式并突出显示输出的清单。 主题还利用列表的自定义帖子类型。 用户输入城市,州,主题返回的搜索范围之内的列表越多越好,即使不是“最近”的主题,我们也试图使该范围内找到的所有特色列表都位于结果的顶部。 ”。 该主题使用以下代码在geo.php文件中设置“距离”:
static function posts_clauses( $clauses, $wp_query ) {
extract(appthemes_geo_get_args());
global $wpdb;
$geo_query = $wp_query->get( 'app_geo_query' );
if ( !$geo_query )
return $clauses;
extract( $geo_query, EXTR_SKIP );
$R = 'mi' == $unit ? 3959 : 6371;
$clauses['join'] .= $wpdb->prepare( " INNER JOIN (
SELECT post_id, ( %d * acos( cos( radians(%f) ) * cos( radians(lat) ) * cos( radians(lng) - radians(%f) ) + sin( radians(%f) ) * sin( radians(lat) ) ) ) AS distance FROM $wpdb->app_geodata
) as distances ON ($wpdb->posts.ID = distances.post_id)
", $R, $lat, $lng, $lat );
$clauses['where'] .= $wpdb->prepare( " AND distance < %f", (float) $rad );
if ( 'distance' == $wp_query->get( 'orderby' ) ) {
$clauses['orderby'] = 'distance ' . ( 'DESC' == strtoupper( $wp_query->get( 'order' ) ) ? 'DESC' : 'ASC' );
}
return $clauses;
}
}
然后在另一个文件(views.php)中,有一些参数可以按评分最高,字母顺序,最新顺序等更改排序顺序。我们遇到的问题是试图使功能列表排在距离结果的顶部。 有一个wp_query会使用以下代码返回顶部的功能:
function parse_query( $wp_query ) {
global $va_options, $wpdb;
$wp_query->set( 'ls', trim( get_query_var( 'ls' ) ) );
$wp_query->set( 's', get_query_var( 'ls' ) );
$wp_query->set( 'post_type', VA_LISTING_PTYPE );
$wp_query->set( 'posts_per_page', $va_options->listings_per_page );
if ( '' == $wp_query->get( 'order' ) )
$wp_query->set( 'order', 'asc' );
$orderby = $wp_query->get( 'orderby' );
if ( empty( $orderby ) ) {
$location = trim( $wp_query->get( 'location' ) );
if ( !empty( $location ) ) {
$orderby = $va_options->default_geo_search_sort;
} else {
$orderby = $va_options->default_search_sort;
}
$wp_query->set( 'orderby', $orderby );
}
$wp_query->set( 'va_orderby', $orderby );
switch ( $orderby ) {
case 'default':
default:
$wp_query->set( 'meta_key', VA_ITEM_FEATURED );
$wp_query->set( 'orderby', 'meta_value_num' );
$wp_query->set( 'order', 'desc' );
$wp_query->set( 'va-featured', true );
break;
}
我删除了一些其他“案例”,以使代码更易于理解。 默认情况下,切换顺序中的距离如下所示:
case 'distance':
break;
这显然是因为orderby是在geo.php文件中定义的。 我试图添加$ wp_query-> set('meta_key','featured_cat'); (它是一个1或0的数字,其中1为Featured),然后为orderby添加一个数组,但不接受。
我认为答案正盯着我,但希望能有所帮助。 任何帮助表示赞赏。
想通了。 我注释掉了geo.php文件中的Orderby子句
if ( 'distance' == $wp_query->get( 'orderby' ) ) {
$clauses['orderby'] = 'distance ' . ( 'DESC' == strtoupper( $wp_query->get( 'order' ) ) ? 'DESC' : 'ASC' );
}
并将orderby规则移至views.php中。 借助Wordpress 4.0,可以进行排序控制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.