Order posts by date and then by custom field

  add_filter('posts_orderby', 'posts_orderby');

  function posts_orderby($orderby_for_query) {
        global $wpdb;
        $prefix = $wpdb->prefix;
        $orderby_for_query = "LEFT(" . $prefix . "posts.post_date, 10) DESC, " . $orderby_for_query;
        return $orderby_for_query;
    }   

This produces this query:

SELECT   wp_posts.* FROM wp_posts  INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1  AND wp_posts.post_type="post" AND (wp_posts.post_status="publish") AND (wp_postmeta.meta_key = 'my_post_rating' ) GROUP BY wp_posts.ID ORDER BY LEFT(wp_posts.post_date, 10) DESC, wp_postmeta.meta_value+0 DESC

Leave a Comment