Horje

Rather save the event meta field date(s) as a unix-timestamp, instead of a string, or you'll be making life too difficult for yourself. It just makes date comparisons so much easier.

Here's an example of how to convert your YYYY/MM/DD format to a unix timestamp:



$date = '2010/09/22';
$dateParts = explode('/', trim($date));
if (count($dateParts) == 3) { $timestamp = mktime(0, 0, 0, $dateParts[1], $dateParts[2], $dateParts[0]);
} else { $timestamp = 0; // The input value is dodgy, therefore the timestamp is set to 0, which is // effectively 1970-01-01T00:00:00Z.
}

To convert back again for user editing and displaying, it's as simple as:



$displayValue = date('Y/m/d', $timestamp);

I'd also recommend that you name your custom field something more specific, like gs_event_date?

After you have done that, create your filter:



function gs_events_pre_get_posts($query) { // Note: Use the $pagenow global for finer grained checking, // if you want to. There are many examples out there. // Your question pertains to admin use only... if (is_admin()) { // Present the posts in your meta_key field's order in admin if (isset($query->
query_vars['post_type'])) { if ($query->
query_vars['post_type'] == 'gs_events') { $query->
set('meta_key', 'gs_event_date'); $query->
set('orderby', 'meta_value'); $query->
set('order', 'ASC'); // ...and if you only want your future events to be // displayed in admin, you can uncomment the following: // $query->
set('meta_compare', '>
='); // $query->
set('meta_value', time()); // Note: The use of time() is quick-and-dirty here, // in reality you'll need to adjust the timezone, // check server-time vs local time, etc. } } }
}

Add your filter...



add_filter('pre_get_posts' , 'gs_events_pre_get_posts');


More Solution
Reffered: https://wordpress.org/