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);
}