Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Wordpress | Filter the function wp_get_archives() so a category_id can be added
/*
* Filter the wp_get_archives() so a cat_id can be added
* Example: wp_get_cat_archives('type=monthly&format=option&show_post_count=1', 46);
* in this case '46' = the category id
*/
add_filter('getarchives_where', 'custom_archives_where', 10, 2);
add_filter('getarchives_join', 'custom_archives_join', 10, 2);
function custom_archives_join($x, $r) {
global $wpdb;
// $cat_ID = $r['cat'];
$cat_ID = isset($r['cat']) ? $r['cat'] : ''; // prevents 'Notice: Undefined index: cat
if (isset($cat_ID)) {
return $x . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)";
} else {
return $x;
}
}
function custom_archives_where($x, $r) {
global $wpdb;
// $cat_ID = $r['cat'];
$cat_ID = isset($r['cat']) ? $r['cat'] : ''; // prevents 'Notice: Undefined index: cat
if (isset($cat_ID)) {
return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id IN ($cat_ID)";
} else {
$x;
}
}
function wp_get_cat_archives($opts, $cat) {
$args = wp_parse_args($opts, array('echo' => '1')); // default echo is 1.
$echo = $args['echo'] != '0'; // remember the original echo flag.
$args['echo'] = 0;
$args['cat'] = $cat;
$tag = ($args['format'] === 'option') ? 'option' : 'li';
$archives = wp_get_archives(build_query($args));
$archs = explode('</'.$tag.'>', $archives);
$links = array();
foreach ($archs as $archive) {
$link = preg_replace("/='([^']+)'/", "='$1?cat={$cat}'", $archive);
array_push($links, $link);
}
$result = implode('</'.$tag.'>', $links);
if ($echo) {
echo $result;
} else {
return $result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.