Order by date, then title
WordPress Event Management, Calendars & Registration › Forums › General Question › Order by date, then title
This topic contains 8 replies, has 2 voices, and was last updated by Stephen Harris 11 years, 5 months ago.
-
AuthorPosts
-
September 30, 2013 at 7:49 am #7507
Hi,
I would like to get all future events and order them as follows:
- OCT 12
- A event
- B event
- X event
- OCT 13
- D event
- F event
The code looks like this
$events = eo_get_events(array( 'get_posts'=>100, 'event_start_after'=>'today', 'showpastevents'=>false,//Will be deprecated, but set it to true to play it safe. 'orderby' => 'date title', 'order'=>'ASC' ));
I know the doc here (http://codex.wp-event-organiser.com/function-eo_get_events.html) says orderby only takes eventstart and eventend, however when I order by “title” alone it works.
Has anyone managed to do that?
Would greatly appreciate help!Anthony Wong
September 30, 2013 at 3:57 pm #7508Hi Anthony,
Actually the
orderby
argument can take anythingWP_Query
orget_posts()
can. The plug-in adds support foreventstart
andeventend
.Unfortunately WordPress doesn’t handle multiple sort criteria, so you need to implement yourself. The below does that, and adds support for
eventstartalpha
as value fororderby
. This sorts by date (no time), and then sorts by title. So the events are then returned in the desired order, but you’ll still need to edit the templates to group events by date.add_filter( 'posts_orderby', 'anthony_sort_events_eventstartalpha', 20, 2 ); function anthony_sort_events_eventstartalpha( $order, $query ){ $order_dir = strtoupper( $query->get( 'order') ); $order_dir = ( $order_dir === 'DESC' ? 'DESC' : 'ASC' ); if( eventorganiser_is_event_query( $query ) && 'eventstartalpha' == $query->get( 'orderby') ){ $order = " {$wpdb->eo_events}.StartDate $order_dir, {$wpdb->posts}.post_title $order_dir"; } return $order; }
Example usage:
[eo_events orderby="eventstartalpha" order="ASC" event_start_after="today"]
Stephen Harris
October 1, 2013 at 12:52 am #7515Thanks Stephen
Where should I use this code?
in events-organiser-pro/includes/functions.php or in the file I’m editing:
events-organiser-pro/includes/shortcodes.phpSo far I’ve pasted the
function anthony_sort_events_eventstartalpha( $order, $query ){
function in functions.phpand add_filter in the shortcodes.php file like this
... $query = wp_parse_args( $input, array( 'post_type' => 'event', 'paged' => max( 1, get_query_var( 'paged' ) ), 'suppress_filters' => false, 'posts_per_page' => 10, ) ); add_filter( 'posts_orderby', 'anthony_sort_events_eventstartalpha', 20, 2 ); if( empty( $query['venue_query'][0]['value'] ) ){ unset( $query['venue_query'][0]); } if( empty( $query['venue_query'][1]['value'] ) ){ unset( $query['venue_query'][1]); } global $eo_event_loop; $eo_event_loop = new WP_Query( $query ); ob_start(); $template_file = eo_locate_template( array( 'search-event-list.php', 'event-list.php' ), true, false ); $html .= ob_get_contents(); ob_end_clean(); return $html;
Finally my shortcode looks lie:
[event_search filters="event_category,event_venue,date" orderby="eventstartalpha" order="ASC" event_start_after="today"]
However it’s not working for me…
Anthony Wong
October 1, 2013 at 9:12 pm #7526Hi Anythony,
The code should exist in a separate plug-in, or your theme’s
functions.php
.However, I see you require this for the event search shortcode. There’s a limitation in that unlike
[eo_events]
you cannot alter a lot of the query settings (I’ll be fixing this shortly, see related topic: http://wp-event-organiser.com/forums/topic/eliminate-pagination/#post-7525).For now the only change you need to make to the core-plugin files is the one below. Note that you should not normally edit the plug-in files as changes are lost when you update. (Please see: http://wp-event-organiser.com/blog/tutorial/where-should-i-put-code-from-the-tutorials/)
$query = wp_parse_args( $input, array( 'post_type' => 'event', 'orderby' => 'eventstartalpha', 'order' => 'ASC', 'paged' => max( 1, get_query_var( 'paged' ) ), 'suppress_filters' => false, 'posts_per_page' => 10, ) );
to replace the existing
$query
(in the above, which should be near line 268 inincludes/shortcodes.php
).From 1.4.1+ you’ll be able to do the following
[event_search orderby="eventstartalpha"]
(assuming you’ve included the code from my first post in a plug-in or
functions.php
to add support foreventstartalpha
)Stephen Harris
October 2, 2013 at 11:22 pm #7551Thank you so much for your help Stephen.
It’s not working for me though. I get a blank results page whenever I uncomment ‘orderby’ => ‘eventstartalpha’
To summerize, my theme’s functions.php file has
add_filter( 'posts_orderby', 'anthony_sort_events_eventstartalpha', 20, 2 ); function anthony_sort_events_eventstartalpha( $order, $query ){ $order_dir = strtoupper( $query->get( 'order') ); $order_dir = ( $order_dir === 'DESC' ? 'DESC' : 'ASC' ); if( eventorganiser_is_event_query( $query ) && 'eventstartalpha' == $query->get( 'orderby') ){ $order = " {$wpdb->eo_events}.StartDate $order_dir, {$wpdb->posts}.post_title $order_dir"; } return $order; }
while my shortcode.php file has
$query = wp_parse_args( $input, array( 'post_type' => 'event', 'orderby' => 'eventstartalpha', 'order' => 'ASC', 'paged' => max( 1, get_query_var( 'paged' ) ), 'suppress_filters' => false, 'posts_per_page' => 1000, ) );
I’ve tried moving the addfilter line to the shortcodes.php file but no change.
add_filter( 'posts_orderby', 'anthony_sort_events_eventstartalpha', 20, 2 );
Anthony Wong
October 2, 2013 at 11:50 pm #7552Sorry Anthony,
I missed out the line
global $wpdb;
– which should inanthony_sort_events_eventstartalpha()
above$order_dir
.Stephen Harris
October 3, 2013 at 3:34 pm #7559Awesome, thanks you!
Anthony Wong
October 4, 2013 at 11:38 am #7575May I ask what if I wanted to order by venue name too (or instead)?
Is something like:$order = " {$wpdb->eo_events}.StartDate $order_dir, {$wpdb->eo_venue}.name $order_dir";
possible?
Anthony Wong
October 5, 2013 at 12:54 pm #7582Unfortunately note, you can’t order by venue name. (Though technically you probably could its a lot more involved, you would have to ensure the venue table is joined).
Stephen Harris
-
AuthorPosts