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;
}

Related

This class serves as the core class for the Launchpad plugin.