A client recently requested that their ‘Members’ page be sorted by surname and not first name. The lists were generated using the follwing code:
<?php$cat_args = array(
'sort_column' => 'post_title',
'order' => 'ASC',
'parent' => 12);
$categories = get_categories($cat_args);
foreach($categories as $category) {
echo '<ul id="member"><li><h3>' . $category->name.'</h3></li>';
$post_args = array(
'numberposts' => 50,
'orderby' => 'title',
'order' => 'ASC',
'category' => $category->term_id );
$posts = get_posts($post_args);
foreach($posts as $post) { ?>
<li><a href="<?php the_permalink(); ?>">
<?php the_title(); ?></a></li> <?php }
echo '</ul>';
}
?>
To sort by surname I created a custom field in the Post Edit screen. The name of the custom field I set to ‘surname’ and I entered the member’s surname in the value field.
I then had to change the PHP code to look for the custom field and sort the list accordingly. I changed the ‘orderby’ => ‘title’, to ‘orderby’ => ‘meta_value’,’meta_key’ => ‘surname’,.
Now the members are sorted by their surnames. Simple! View the code in action here.
Note: If the custom field of ‘surname’ is not given a value then the post title will not display in the list.
Leave a Reply