Function Reference: geodir_posts_order_by_custom_sort
Summary
Listing orderby custom sort.
Global Values
- $wpdb
- (object) (required) WordPress Database object.
- Default: None
Package
GeoDirectory
Parameters
- $orderby
- (string) (required) The orderby query string.
- Default: None
- $sort_by
- (string) (required) Sortby query string.
- Default: None
- $table
- (string) (required) Listing table name.
- Default: None
Return Values
- (string)
- Modified orderby query.
Change Log
Since: 1.0.0
Source File
geodir_posts_order_by_custom_sort() is located in geodirectory-functions/listing_filters.php [Line: 510]
Source Code
function geodir_posts_order_by_custom_sort($orderby, $sort_by, $table) { global $wpdb; if ($sort_by != '' && (!is_search() || ( isset($_REQUEST['s']) && isset($_REQUEST['snear']) && $_REQUEST['snear']=='' && ( $_REQUEST['s']=='' || $_REQUEST['s']==' ') ) )) { $sort_array = explode('_', $sort_by); $sort_by_count = count($sort_array); $order = $sort_array[$sort_by_count - 1]; if ($sort_by_count > 1 && ($order == 'asc' || $order == 'desc')) { $sort_by = str_replace('_' . $order, '', $sort_by); switch ($sort_by): case 'post_date': case 'comment_count': $orderby = "$wpdb->posts." . $sort_by . " " . $order . ", ".$table . ".overall_rating " . $order . ", "; break; case 'distance': $orderby = $sort_by . " " . $order . ", "; break; // sort by rating case 'overall_rating': $use_bayesian = apply_filters('gd_use_bayesian',true,$table); $avg_rating = 0; if($use_bayesian){ $avg_num_votes = get_transient( 'gd_avg_num_votes_'.$table ); if(!$avg_num_votes){ $avg_num_votes = $wpdb->get_var("SELECT SUM(rating_count) FROM $table"); if($avg_num_votes){ $avg_rating = get_transient( 'gd_avg_rating_'.$table ); if(!$avg_rating){ $avg_rating = $wpdb->get_var("SELECT SUM(overall_rating) FROM $table")/$avg_num_votes; } set_transient( 'gd_avg_num_votes_'.$table, $avg_num_votes, 12 * HOUR_IN_SECONDS ); set_transient( 'gd_avg_rating_'.$table, $avg_rating , 12 * HOUR_IN_SECONDS ); } } if(!$avg_num_votes){ $avg_num_votes = 0;} $orderby = " (( $avg_num_votes * $avg_rating ) + (" . $table . ".rating_count * " . $table . ".overall_rating )) / ( $avg_num_votes + " . $table . ".rating_count ) $order , "; //$orderby = " ( " . $table . ".rating_count * " . $table . ".overall_rating ) + (" . $table . ".rating_count * " . $table . ".overall_rating ) / ( " . $table . ".rating_count + " . $table . ".rating_count ) $order , "; // seems to work mostly with no extra overheads }else{ $orderby = " " . $table . "." . $sort_by . " " . $order . ", " . $table . ".rating_count " . $order . ", "; } break; default: if (geodir_column_exist($table, $sort_by)) { $orderby = $table . "." . $sort_by . " " . $order . ", "; } break; endswitch; } } return $orderby; }