WP_Date_Query::get_sql_for_clause( array $query, array $parent_query )
Turns a first-order date query into SQL for a WHERE clause.
Parameters
- $query
-
(Required) Date query clause.
- $parent_query
-
(Required) Parent query of the current date query.
Return
(string[]) Array containing JOIN and WHERE SQL clauses to append to the main query.<br>
- 'join'
(string) SQL fragment to append to the main JOIN clause.<br> - 'where'
(string) SQL fragment to append to the main WHERE clause.<br>
Source
File: wp-includes/class-wp-date-query.php
protected function get_sql_for_clause( $query, $parent_query ) {
global $wpdb;
// The sub-parts of a $where part.
$where_parts = array();
$column = ( ! empty( $query['column'] ) ) ? esc_sql( $query['column'] ) : $this->column;
$column = $this->validate_column( $column );
$compare = $this->get_compare( $query );
$inclusive = ! empty( $query['inclusive'] );
// Assign greater- and less-than values.
$lt = '<';
$gt = '>';
if ( $inclusive ) {
$lt .= '=';
$gt .= '=';
}
// Range queries.
if ( ! empty( $query['after'] ) ) {
$where_parts[] = $wpdb->prepare( "$column $gt %s", $this->build_mysql_datetime( $query['after'], ! $inclusive ) );
}
if ( ! empty( $query['before'] ) ) {
$where_parts[] = $wpdb->prepare( "$column $lt %s", $this->build_mysql_datetime( $query['before'], $inclusive ) );
}
// Specific value queries.
if ( isset( $query['year'] ) && $value = $this->build_value( $compare, $query['year'] ) )
$where_parts[] = "YEAR( $column ) $compare $value";
if ( isset( $query['month'] ) && $value = $this->build_value( $compare, $query['month'] ) ) {
$where_parts[] = "MONTH( $column ) $compare $value";
} elseif ( isset( $query['monthnum'] ) && $value = $this->build_value( $compare, $query['monthnum'] ) ) {
$where_parts[] = "MONTH( $column ) $compare $value";
}
if ( isset( $query['week'] ) && false !== ( $value = $this->build_value( $compare, $query['week'] ) ) ) {
$where_parts[] = _wp_mysql_week( $column ) . " $compare $value";
} elseif ( isset( $query['w'] ) && false !== ( $value = $this->build_value( $compare, $query['w'] ) ) ) {
$where_parts[] = _wp_mysql_week( $column ) . " $compare $value";
}
if ( isset( $query['dayofyear'] ) && $value = $this->build_value( $compare, $query['dayofyear'] ) )
$where_parts[] = "DAYOFYEAR( $column ) $compare $value";
if ( isset( $query['day'] ) && $value = $this->build_value( $compare, $query['day'] ) )
$where_parts[] = "DAYOFMONTH( $column ) $compare $value";
if ( isset( $query['dayofweek'] ) && $value = $this->build_value( $compare, $query['dayofweek'] ) )
$where_parts[] = "DAYOFWEEK( $column ) $compare $value";
if ( isset( $query['dayofweek_iso'] ) && $value = $this->build_value( $compare, $query['dayofweek_iso'] ) )
$where_parts[] = "WEEKDAY( $column ) + 1 $compare $value";
if ( isset( $query['hour'] ) || isset( $query['minute'] ) || isset( $query['second'] ) ) {
// Avoid notices.
foreach ( array( 'hour', 'minute', 'second' ) as $unit ) {
if ( ! isset( $query[ $unit ] ) ) {
$query[ $unit ] = null;
}
}
if ( $time_query = $this->build_time_query( $column, $compare, $query['hour'], $query['minute'], $query['second'] ) ) {
$where_parts[] = $time_query;
}
}
/*
* Return an array of 'join' and 'where' for compatibility
* with other query classes.
*/
return array(
'where' => $where_parts,
'join' => array(),
);
}
Changelog
Version | Description |
---|---|
4.1.0 | Introduced. |