Support

Account

Home Forums General Issues Sorting posts by two custom fields

Solved

Sorting posts by two custom fields

  • Each post has custom fields “order_status” and “order_date_end”.
    I have sorted posts by “order_status” in lowest order(ASC).
    And among these sorted (go in groups), sorting by the “order_date_end” field from the largest is impossible(DESC).

    $posts = get_posts( array(
              'numberposts' => -1,
              'orderby'   	=> array(
                      'order_status' => 'ASC',
                      'order_date_end' => 'DESC',
                        ),
              'meta_key' 	=> 'order_status',
              'post_type'  	=> 'order-item',
            ) );

    Maybe someone came across?

  • You cannot sort by multiple fields the way you are attempting to do it. Since order_date_end in not references in the query anywhere WP can’t use it.

    Take a look at WP_Query Custom Fields section, particularly the part about “meta_query” which you need to use to filter or order by multiple fields.

    Then look at the orderby section and the code example titled ‘orderby’ with multiple ‘meta_key’s

    Let me know if you can’t figure it out from there?

  • I changed it like this. It seems to work. If I changed correctly.

    $posts = get_posts( array(
    					'numberposts' 	=> -1,
    					'post_type'  	=> 'order-item',
                        'meta_query'    =>  array(
                            'relation'  =>  'AND',
                            'order_status'  =>  array(
                                'key'       => 'order_status',
                                'value'     =>  array(1,2,3,4,5),
                            ),
                            'order_date_end'    => array(
                                'key'       => 'order_date_end',
                                'compare'   =>  'EXISTS',
                            )
                        ),
                        'orderby'   =>  array(
                            'order_status' =>   "ASC",
                            'order_date_end' =>   "DESC",
                        ),
    				) );
    
  • Not sure about the order status value, but that looks good to me

Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.