質問: $_get['sortby']; } }
回答: イベントのメタフィールドの日付を文字列ではなくunix-timestampとして保存するのではなく、人生を自分では困難にしすぎるでしょう。日付の比較が非常に簡単になります。yyyy/mm/dd形式をunixタイムスタンプに変換する方法の例を示します。$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. } ユーザーの編集および表示用に再度変換するには、次のように簡単です。$displayvalue = date('y/m/d', $timestamp); gs_event_dateのように、カスタムフィールドにもっと具体的な名前を付けることをお勧めします。それが終わったら、フィルタを作成します。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_filter('pre_get_posts' , 'gs_events_pre_get_posts');