posts_clauses( $clauses, $query )
This function hooks into the ‘posts_clauses’ filter and modifies various clauses of the main query to include custom conditions when necessary for the post type. You can use this filter to add or modify different parts of the SQL query, such as SELECT, FROM, WHERE, JOIN, ORDER BY, GROUP BY, and LIMIT.
Plugin
Namespace
Launchpad
Parameters
array
$clauses
The associative array containing the clauses of the main query.
WP_Query
$query
The WP_Query instance.
Return
array
Modified clauses of the main query.
Source
File: \includes\class-lp-cpt.php
public function posts_clauses( $clauses, $query ) {
$post_type = $query->get( 'post_type' );
$custom_meta_key = $query->get( 'lp__meta_key' );
$term_meta_tax = $query->get( 'lp__term_meta_tax' );
$distance_query = $query->get( 'lp__distance' );
$orderby = $query->get( 'orderby' );
$order = $query->get( 'order' );
if ( lp__table_exists( $post_type ) && $post_type === $this->post_type ) {
global $wpdb;
// Modify the 'ORDER BY' clause to order by the specified meta key (custom table key).
if( $custom_meta_key ){
$clauses = self::add_to_orderby_post_clause( $clauses, "lp__meta_value", "{$wpdb->prefix}{$post_type}.{$custom_meta_key}", $orderby, $order );
}
if( $term_meta_tax ){
$clauses = self::add_to_orderby_post_clause( $clauses, "lp__term_menu_order", "IFNULL(CAST(lp_termmeta.meta_value AS SIGNED), 9999)", $orderby, $order );
}
if( self::has_valid_distance_query_args( $distance_query ) ){
$lat = lp__array_key_value( "latitude", $distance_query );
$lng = lp__array_key_value( "longitude", $distance_query );
$distance = "( 6371 * acos( cos( radians( {$lat} ) ) * cos( radians( {$wpdb->prefix}{$post_type}.latitude ) ) * cos( radians( {$wpdb->prefix}{$post_type}.longitude ) - radians( {$lng} ) ) + sin( radians( {$lat}) ) * sin( radians( {$wpdb->prefix}{$post_type}.latitude ) ) ) )";
$clauses = self::add_to_orderby_post_clause( $clauses, "lp__distance", $distance, $orderby, $order );
}
}
if( method_exists( $this, "posts_clauses_{$this->post_type}" ) ){
$clauses = $this->{"posts_clauses_{$this->post_type}"}( $clauses, $query );
}
return $clauses;
}