[wp-trac] [WordPress Trac] #29432: Date Parameters + Post Status = Invalid SQL

WordPress Trac noreply at wordpress.org
Fri Aug 29 17:58:25 UTC 2014

#29432: Date Parameters + Post Status = Invalid SQL
 Reporter:  restouffer    |      Owner:
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Date/Time     |    Version:  trunk
 Severity:  normal        |   Keywords:
  Focuses:                |
 When specifying date parameters in the query (year, month, day) and also
 specifying a post_status, the SQL generated causes the following error:
 Column 'post_date' in where clause is ambiguous

 This means that no results are returned, even if there are posts matching
 that date and post_status. The reason for ambiguity in the SQL is that
 specifying a post_status joins the wp_posts table to itself in order to
 look for children, and MySQL cannot tell which table to read post_date

 The ambiguous part of the SQL is generated by WP_Date_Query, which is used
 to construct the WHERE clause when date parameters are specified, since it
 uses the column name without the table name (e.g. - "post_date" instead of
 "$wpdb->posts.post_date"). The WP_Date_Query class provides two ways of
 passing the column name, but currently WP_Query uses neither and relies on
 the default value. (wp-includes/query.php:2544)

 If the full column definition was passed, it would also require a change
 to the WP_Date_Query::validate_column method, as currently it will not
 recognize the column with a table name and will change the full name back
 into "post_date".

 With the validation changed (or removed), the call to the WP_Date_Query
 constructor could then look like:

 $this->date_query = new WP_Date_Query( $q['date_query'],
 "$wpdb->posts.post_date" );

Ticket URL: <https://core.trac.wordpress.org/ticket/29432>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list