=== Expanding Archives === Contributors: NoseGraze Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=L2TL7ZBVUMG9C Tags: widget, sidebar, posts, archives, navigation, menu, collapse, expand, collapsing, collapsible, expanding, expandable Requires at least: 3.0 Tested up to: 6.4.3 Requires PHP: 7.4 Stable tag: trunk License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html This plugin adds a new widget where you can view your old posts by expanding certain years and months. == Description == Expanding Archives adds a widget that shows your old posts in an expandable/collapsible format. Each post is categorized under its year and month, so you can expand all the posts in a given month and year. This plugin comes with very minimal CSS styling so you can easily customize it to match your design. JavaScript is required. No IE support. == Installation == 1. Upload `expanding-archives` to the `/wp-content/plugins/` directory 1. Activate the plugin through the 'Plugins' menu in WordPress 1. Go to Appearance -> Widgets and drag the Expanding Archives widget into your sidebar. == Frequently Asked Questions == = How can I change the appearance of the widget? = The plugin does not come with a settings panel so you have to do this with your own custom CSS. Here are a few examples: Change the year background colour: `.expanding-archives-title { background: #000000; }` Change the year font colour: `.expanding-archives-title a { color: #ffffff; }` = How can I limit the results to a specific category? = By default, the widget includes posts in all categories. You can add the following code to a custom plugin or a child theme's functions.php file to limit the results to posts in a specific category: `add_filter('expanding_archives_get_posts', function(array $args) { $args['cat'] = 2; // Replace with ID of your category. return $args; }); add_filter('expanding_archives_query', function(string $query) { $category = get_category(2); // Replace with ID of your category. if (! $category instanceof \WP_Term) { return $query; } global $wpdb; return " SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year, COUNT(id) as post_count FROM {$wpdb->posts} INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id AND {$wpdb->term_relationships}.term_taxonomy_id = 2) WHERE post_status = 'publish' AND post_date <= now() AND post_type = 'post' GROUP BY month, year ORDER BY post_date DESC "; });` Be sure to set the ID of your category in both of the designated places (the examples use ID `2`). Note that the results may not update instantly, as the query to retrieve the date periods is cached for one day. To force the query to re-run, delete this transient: `expanding_archives_months` = How can I specify a cut-off date? = By default, the widget will show a list of every year you've published posts. If you have a lot of posts, you may wish to only show results from the last few years. This can be done with the following code snippet: `add_filter('expanding-archives/earliest-date', fn() => '-4 years');` You can change `-4 years` to any value supported by [the PHP DateTime constructor](https://www.php.net/manual/en/datetime.construct.php). This can be a relative value (as shown above), or a specific date like: `add_filter('expanding-archives/earliest-date', fn() => '2023-01-01');` Note that the results may not update instantly, as the query to retrieve the date periods is cached for one day. To force the query to re-run, delete this transient: `expanding_archives_months` == Screenshots == 1. The widget on my blog. This version has custom CSS applied. 2. The widget on the Twenty Fifteen theme, with only the default styles applied. 3. No widget settings - just add and save! == Changelog == = 2.1.0 - 23 March 2024 = * New: Added support (via a filter) for specifying a cut-off date. See readme FAQ for details. = 2.0.2 - 3 February, 2022 = * Refactor: Posts are now retrieved via a custom REST API endpoint, instead of the default. This allows developers to more easily filter the query arguments for retrieving posts. = 2.0.1 - 31 January, 2022 = * Fix: Only showing a max of 10 posts in a month. Now it will show up to 100. = 2.0 - 23 January, 2022 = * Dev: Plugin has been rewritten (should be backwards compatible). * Dev: Removed jQuery dependency (and dropped IE support). * Dev: Remove Font Awesome spinner in favour of vanilla CSS. * Fix: Invalid HTML when the site has no posts. = 1.1.1 = * Added filters that allow developers to easily modify the archive list. = 1.1.0 = * Added a new option in the widget where you can choose to auto expand the current month or not. = 1.0.5 = * Use transient for database query that fetches all the months. = 1.0.4 = * Added `xhrFields: { withCredentials: true }` to ajax call. = 1.0.3 = * Changed the month URLs to use get_month_link() instead of building them manually. * Tested the plugin with WordPress 4.4 beta. = 1.0.2 = * Tested with WordPress version 4.3. = 1.0.1 = * Month names are now displayed using date_i18n() instead of date() so they will translate. = 1.0.0 = * Initial release. == Upgrade Notice == = 2.1.0 = * Added support (via a filter) for specifying a cut-off date. See readme FAQ for details.