Custom post order when using OR relation
-
I have a custom post type named Faculty. Faculty must be one or more of the type: MCT, MLT, or MT.
MCT -> A, B MLT -> C, E MT -> C, D
I want to list all MLT and MT faculty on a page in order by last name -> C, D, E
I am having a problem with the OR relation when used with orderby where it is returning all faculty that are MLT or MT or have a last name (which is everyone). The AND relation works correctly, returning just C.
My WP_Query arguments are:
Array( [post_type] => faculty [order] => ASC [orderby] => meta_value [meta_key] => faculty_last_name [meta_query] => Array( [relation] => OR [0] => Array( [key] => faculty_MLT [value] => MLT [compare] => = ) [1] => Array( [key] => faculty_MT [value] => MT [compare] => = ) ) )
The SQL created is:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id) WHERE 1=1 AND wp_posts.post_type = 'faculty' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND (wp_postmeta.meta_key = 'faculty_last_name' -->OR (mt1.meta_key = 'faculty_MLT' AND CAST(mt1.meta_value AS CHAR) = 'MLT') OR (mt2.meta_key = 'faculty_MT' AND CAST(mt2.meta_value AS CHAR) = 'MT') ) GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value ASC LIMIT 0, 10
If I change the –>OR to AND, the query returns the correct result.
Is there some way to use orderby along with relation => OR in wp_query?
- The topic ‘Custom post order when using OR relation’ is closed to new replies.