Skip to main content
7 of 9
Rollback to Revision 5
Randomer11
  • 416
  • 11
  • 31

Order posts by meta value hiding posts instead of re-ordering

The code below is suppose to display all posts with "featured_listing" meta key above all of the standard posts.

When the below code is in the functions.php, it hides all posts without "featured_listing" meta.

I can't work out why its not working. Help would be appreciated.

function custom_special_sort( $query ) {
     if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    // if is this the main query and is this post type of business
    if ( (is_post_type_archive('business') ) || (is_tax ('location') ) ) {

        // order results by the meta_key 'featured_listing'
       $query->set( 'meta_key', 'featured_listing' );
        $query->set( 'orderby', 'featured_listing' );
        $query->set( 'order', 'DESC' );
        
    }
}
add_action( 'pre_get_posts', 'custom_special_sort' );

I suspect this could be similar to this mentioned on stackoverflow but I'm really not sure :

the query is doing an inner join on the posts and postmeta tables, which is > why posts that don't have that particular post meta entry aren't being returned by the query. What you want is a left join

https://stackoverflow.com/questions/30361635/wp-archives-order-by-custom-meta-key

Randomer11
  • 416
  • 11
  • 31