/** * Get the date archives. * * @link https://developer.wordpress.org/reference/functions/wp_get_archives/ * * @uses \add_filter() * @uses \remove_filter() * * @param string $type * @return \Illuminate\Support\Collection|\Luminous\Bridge\Post\DateArchive[] */ public function archives($type) { $groupbyFilter = function () use($type) { $formats = ['yearly' => 'YEAR(`%1$s`)', 'monthly' => 'YEAR(`%1$s`), MONTH(`%1$s`)', 'daily' => 'YEAR(`%1$s`), MONTH(`%1$s`), DAYOFMONTH(`%1$s`)']; return sprintf($formats[$type], 'post_date'); }; $fieldsFilter = function () use($type) { $formats = ['yearly' => 'DATE_FORMAT(`%1$s`, \'%%Y-01-01\') as `_date`, count(`%2$s`) as `_count`', 'monthly' => 'DATE_FORMAT(`%1$s`, \'%%Y-%%m-01\') as `_date`, count(`%2$s`) as `_count`', 'daily' => 'DATE_FORMAT(`%1$s`, \'%%Y-%%m-%%d\') as `_date`, count(`%2$s`) as `_count`']; return sprintf($formats[$type], 'post_date', 'ID'); }; add_filter('posts_groupby', $groupbyFilter); add_filter('posts_fields', $fieldsFilter); $query = $this->orderBy('created_at', 'desc')->buildQuery(); remove_filter('posts_groupby', $groupbyFilter); remove_filter('posts_fields', $fieldsFilter); return new Collection(array_map(function ($object) use($type) { return DateArchive::createFromFormat($type, 'Y-m-d', $object->_date)->setCount($object->_count); }, $query->posts)); }
/** * Get the date parameter. * * @return \Luminous\Bridge\Post\DateArchive|null */ protected function getDate() { if (!($path = $this->route('date__path'))) { return null; } return DateArchive::createFromPath($path); }