mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-04-04 20:54:29 +00:00
Use only LEFT JOINs when a meta_query contains a NOT EXISTS clause.
Mixing LEFT and INNER JOIN in these cases results in posts with no metadata being improperly excluded from results. Props johnrom. Fixes #29062. git-svn-id: https://develop.svn.wordpress.org/trunk@29890 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -1123,6 +1123,14 @@ class WP_Meta_Query {
|
||||
|
||||
$sql = $this->get_sql_clauses();
|
||||
|
||||
/*
|
||||
* If any JOINs are LEFT JOINs (as in the case of NOT EXISTS), then all JOINs should
|
||||
* be LEFT. Otherwise posts with no metadata will be excluded from results.
|
||||
*/
|
||||
if ( false !== strpos( $sql['join'], 'LEFT JOIN' ) ) {
|
||||
$sql['join'] = str_replace( 'INNER JOIN', 'LEFT JOIN', $sql['join'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the meta query's generated SQL.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user