The getarchives_where WordPress PHP filter allows you to modify the SQL WHERE clause when retrieving archives.
Usage
add_filter('getarchives_where', 'your_custom_function', 10, 2); function your_custom_function($sql_where, $parsed_args) { // your custom code here return $sql_where; }
Parameters
$sql_where
(string) – The portion of the SQL query containing the WHERE clause.$parsed_args
(array) – An array of default arguments.
More information
See WordPress Developer Resources: getarchives_where
Examples
Filter archives by a specific category
Filter the archives list to show only posts from a specific category.
add_filter('getarchives_where', 'filter_archives_by_category', 10, 2); function filter_archives_by_category($sql_where, $parsed_args) { global $wpdb; // Replace 'your-category-slug' with the desired category slug $category_id = get_category_by_slug('your-category-slug')->term_id; $sql_where .= " AND $wpdb->term_taxonomy.term_id = $category_id"; return $sql_where; }
Filter archives by custom post type
Filter the archives list to show only posts from a custom post type.
add_filter('getarchives_where', 'filter_archives_by_custom_post_type', 10, 2); function filter_archives_by_custom_post_type($sql_where, $parsed_args) { global $wpdb; // Replace 'your-custom-post-type' with your desired custom post type $sql_where .= " AND $wpdb->posts.post_type = 'your-custom-post-type'"; return $sql_where; }
Filter archives by date range
Filter the archives list to show only posts within a specific date range.
add_filter('getarchives_where', 'filter_archives_by_date_range', 10, 2); function filter_archives_by_date_range($sql_where, $parsed_args) { global $wpdb; // Replace 'start_date' and 'end_date' with your desired date range $sql_where .= " AND $wpdb->posts.post_date BETWEEN 'start_date' AND 'end_date'"; return $sql_where; }
Filter archives by post status
Filter the archives list to show only posts with a specific post status.
add_filter('getarchives_where', 'filter_archives_by_post_status', 10, 2); function filter_archives_by_post_status($sql_where, $parsed_args) { global $wpdb; // Replace 'your-post-status' with your desired post status $sql_where .= " AND $wpdb->posts.post_status = 'your-post-status'"; return $sql_where; }
Filter archives by author
Filter the archives list to show only posts by a specific author.
add_filter('getarchives_where', 'filter_archives_by_author', 10, 2); function filter_archives_by_author($sql_where, $parsed_args) { global $wpdb; // Replace 'your-author-id' with the desired author ID $sql_where .= " AND $wpdb->posts.post_author = your-author-id"; return $sql_where; }