Support

Account

Home Forums General Issues Sorting posts by custom field's custom order

Solved

Sorting posts by custom field's custom order

  • Hi, I’m at a loss with how to sort posts by an order that I choose.

    The below code pulls in teachers from a location. I’d like them to sort by their role (a custom field) in this order ‘Director, Lead Teacher, Teacher, Assistant Teacher’.

    $facultys = get_posts(array(
    ‘post_type’ => ‘faculty’,
    ‘order’ => ‘ASC’,
    ‘meta_query’ => array(
    array(
    ‘key’ => ‘location’,
    ‘value’ => ”,
    ‘compare’ => ‘LIKE’,
    ),
    array(
    ‘key’=> ‘role’,
    ‘value’ => ”,
    ‘compare’ => ‘LIKE’,
    )
    )
    ));

  • It would be this way (notice the orderby and meta_key properties):

    
    $facultys = get_posts(array(
    	'post_type’ => 'faculty’,
    	'order’ => 'ASC’,
    	'orderby' => 'meta_value', 
    	'meta_key' => 'role'
    	'meta_query’ => array(
    		array(
    			'key’ => 'location’,
    			'value’ => ”,
    			'compare’ => 'LIKE’,
    		),
    		array(
    			'key’=> 'role’,
    			'value’ => ”,
    			'compare’ => 'LIKE’,
    		)
    	)
    ));
    
    

    But, it seems that you want to order the post in a specific custom order which is not alphabetical or numerical (I’m saying that because ‘Assistant Teacher’ is after ‘Teacher’, while the rest are in a alpha order). In that case, you should create four get_posts queries (it could be the same in a loop, only changing the role value), each query with the specific role.

    More useful info

  • Like this:

    $roles = array('Director', 'Lead Teacher', 'Teacher', 'Assistant Teacher');
    Also, roles could be populated from a taxonomy or from a custom post type.

    Then:

    
    $location = ''; // to be defined
    $facultys = array();
    
    foreach($roles as $role) {
    	$posts = get_posts(array(
    		'post_type’ => 'faculty’,
    		'order’ => 'ASC’,
    		'meta_query’ => array(
    			array(
    				'key’ => 'location’,
    				'value’ => $location,
    				'compare’ => 'LIKE’,
    			),
    			array(
    				'key’=> 'role’,
    				'value’ => $role,
    				'compare’ => 'LIKE’,
    			)
    		)
    	));
    
    	// Merge the posts result with the existing facultys
    	$facultys = array_merge($facultys, $posts);
    }
    
    
Viewing 3 posts - 1 through 3 (of 3 total)

The topic ‘Sorting posts by custom field's custom order’ is closed to new replies.